数据结构编程题 顺序表
删除最小值题目描述从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。
解题代码bool deleteMin(vector<int>& nums, int& val) {
if (nums.empty()) {
return false;
}
int minVal = INT32_MAX, minIdx = 0;
for (int i = 0; i < nums.size(); ++i) {
if (minVal > nums[i]) {
minVal = nums[i];
minIdx = i;
}
}
nums[minIdx] = nums.back();
val = minVal;
return true;
}
逆置顺序表题目描述设 ...
有关C++字符串拷贝的一个小问题
最近面试被问到了一个 C++ 中的小问题,就是如果有字符串 s1 和 s2,将 s1 赋值给 s2 后,它们的内存分布是什么样的。当时感觉可能是共享的,但也不太确定,回来后查阅资料发现结果并不是那么简单。
查阅资料首先是询问 chatGPT 得到的答案,如下:
如果两个 string 对象存储相同的字符串,它们可能会共享同一个内存块,也可能会分别分配自己的内存块。当一个 string 对象被创建时,它会分配一个新的内存块,并将字符串复制到该内存块中。当第二个 string 对象被创建时,它可能会使用与第一个 string 对象相同的内存块,也可能会分配一个新的内存块并将字符串复制到该内存块中。
代码测试看来又是一个没有标准解决方案的问题,于是我编写了一个简单的程序用来在不同的环境下测试。
void* operator new(size_t count) {
cout << "Allocate " << count << " Bytes" << endl;
return malloc(count);
}
int ...
计算机基础面试题总结
承接上文,本文总结了计算机基础学科(包括数据结构、计算机组成原理、操作系统、计算机网络等)常见的一些面试问题,以便随时查看。
常见的进程调度算法有哪些
先来先服务调度算法:处于就绪态的进程按先后顺序链入到就绪队列中,而先来先去服务调度算法按就绪进程进入就绪队列的先后次序选择当前最先进入就绪队列的进程来执行,直到此进程阻塞或结束,才进行下一次的进程选择调度。
短进程优先调度算法:是一种按照进程执行时间长短进行调度的算法,即优先调度执行时间短的进程。
优先级调度算法:优先级调度算法又称优先权调度算法。优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。
高响应比优先调度算法:该算法是对 FCFS 调度算法和 SPF 调度算法的一种综合平衡,同时考虑每个进程的等待时间和估计的运行时间。在每次进行进程调度时,先计算就绪队列中每个进程的响应比,从中选出响应比最高的进程投入运行。
时间片轮转调度算法:时间片轮转调度算法主要适用于分时系统。每次调度时,把 CPU 分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便 ...
C++面试题总结
由于考研失利,最近在准备春招,想要找一份游戏客户端开发的岗位,便想要将 C++ 常见的面试题整理出来。题目来自牛客网的 C++ 面试题库,答案结合了牛客网给出的参考答案、new bing 给出的回答以及个人的理解和思考。
C++ 和 C 中 struct 的区别,以及 C++ 中 struct 和 class 的区别C++ 和 C 中 struct 的区别
C 中 struct 只能定义成员变量,不能定义成员函数,而 C++ 中 struct 可以定义成员函数,甚至构造函数,析构函数,友元等。
C 中 struct 内的成员变量不可以直接初始化,而 C++ 中可以。
C 中使用结构体需要加上 struct 关键字,或者使用 typedef 对结构体取别名后再直接使用其别名,而 C++ 使用结构体则可以直接忽略 struct 关键字。
C++ 中 struct 和 class 的区别
class 的成员默认是 private 的,而 struct 的成员默认是 public 的。
class 继承默认是 private 继承,而 struct 继承默认是 public 继承。
st ...
C++中的静态(static)
一般来说,C++ 中的 static 关键字具有不同的含义,而这取决于它的使用场景。
函数内的变量我们知道,函数内作为一个局部作用域,其中定义的临时变量将会在函数执行结束后被销毁。
void Func() {
int x = 0;
++x;
cout << x << endl;
}
int main() {
Func(); // 输出1
Func(); // 输出1
Func(); // 输出1
}
但我们可以通过在变量前添加 static 关键字将该其定义为一个静态变量,该静态变量的生存周期贯穿于整个程序周期,这一点类似于全局变量,但不同的是静态变量的作用域仍然保持不变,也就是整个函数体内。
void Func() {
static int x = 0;
++x;
cout << x << endl;
}
int main() {
// x = 10; 编译出错
Func(); // 输出1
Func(); // 输出2
Func( ...
LeetCode周赛总结 第334场
左右元素和的差值题目链接左右元素和的差值
解题思路直接按照题目要求模拟即可,两次遍历求出 leftSum 和 rightSum,再计算得出 answer.
解题代码class Solution {
public:
vector<int> leftRigthDifference(vector<int>& nums) {
int n = nums.size();
vector<int> leftSum(n, 0);
for (int i = 0; i < n - 1; ++i) {
leftSum[i + 1] = leftSum[i] + nums[i];
}
vector<int> rightSum(n, 0);
for (int i = n - 1; i > 0; --i) {
rightSum[i - 1] = rightSum[i] + num ...
LeetCode周赛总结 第333场
合并两个二维数组 - 求和法题目链接合并两个二维数组 - 求和法
解题思路本题较为基础,可以直接分别遍历两数组,再用哈希表记录两数组中各编号的累加和,但该方法比较消耗空间,时间上的性能也不理想。
考虑到数组 nums1 和 nums2 都包含互不相同的 id,并按 id 以递增顺序排列,因此想到利用归并排序的思想,设立双指针 p1 和 p2,若两指针所指数组元素的 id 相同,则将 { nums1[p1][0], nums1[p1][1] + nums2[p2][1] } 进行归并,否则将较小 id 的元素(假设 p1 所指元素 id 更小) { nums1[p1][0], nums1[p1][1] } 进行归并。
解题代码class Solution {
public:
vector<vector<int>> mergeArrays(vector<vector<int>>& nums1, vector<vector<int>>& nums2) {
v ...
LeetCode周赛总结 第331场
从数量最多的堆取走礼物题目链接从数量最多的堆取走礼物
解题思路直接按照流程模拟即可,将数组 gifts 的元素放入优先队列中,然后每次从中选出最大值 maxGift,再将 sqrt(maxGift) 放回队列,重复 k 次,计算队列剩余的值总和。
解题代码class Solution {
public:
long long pickGifts(vector<int>& gifts, int k) {
// 这里求 gifts 总和要注意累加初始值定义为 0ll(long long 类型),否则 int 可能溢出
// 当然也可以不求初始总数量,而在循环结束后直接统计剩余的数量
long long sum = accumulate(gifts.begin(), gifts.end(), 0ll);
priority_queue<int> Q(gifts.begin(), gifts.end());
long long res = 0;
for ( ...
2022年游戏总结
今年由于要准备考研,博客几乎没怎么更新,游戏玩的也比较少,算上填坑、试玩、弃坑的粗略计算大概 20 款,其中不乏近年的新游戏以及一直想补的老游戏,以下是从中选出的几款个人觉得比较有的聊的作品。
勇者斗恶龙11s 寻觅逝去的时光
国民级 jrpg 系列的最新作品,各方面都非常均衡,角色构筑、战斗系统、隐藏要素的设计已经相当成熟。给我印象最深刻的还是本作的数值设计,将游戏流程的难度曲线设置的非常平缓,正常推进流程的情况下,既不会让战斗太过困难,也不会让战斗太过简单,整体战斗节奏非常舒适。剧情部分虽然较为王道,但人物性格塑造不错,能够让人代入其中,同时也有诸如人鱼的故事这样动人的剧情。
本作作为传统 jrpg 给我的感觉就是一切做的都很不错,但总感觉还差那么一口气,整体上设计还是过于保守,没有让我感到特别惊艳的地方。同时很多设计放在今天来看确实有点过时了,主要还是大量无聊的重复劳动,尽管特别的二周目剧情算是一个亮点,但也意味着要重新体验一遍几乎一样的流程,放在今天确实是很难以让人坚持的。另外本作的配乐由于大量沿用了以往作品的配乐,原创配乐不多,虽然单听确实还不错,但与游戏本身的故事结合并不 ...
LeetCode周赛总结 第327场
由于考研等因素的影响,已经时隔一年没有参加力扣周赛了,长时间没有好好琢磨算法题,思维敏捷度确实有所下降,好在这次周赛前两题都没有什么难度,但第三题却把简单问题想复杂了,第四题就基本上都没怎么读题了。。。
正整数和负整数的最大计数题目链接正整数和负整数的最大计数
解题思路直接依照题意统计该数组中正整数和负整数的个数,然后返回较大个数即可,送分题。
解题代码class Solution {
public:
int maximumCount(vector<int>& nums) {
int cnt1 = 0, cnt2 = 0;
for (int i = 0; i < nums.size(); ++i) {
if (nums[i] > 0) {
++cnt1;
}
else if (nums[i] < 0) {
++cnt2;
...