【算法通关指南:数据结构和算法篇 】顺序表相关算法题 :1.询问学号,2.寄包柜,3.合并两个有序数组
·

🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人方向学习者
❄️个人专栏:《算法通关指南 》
✨ 永远相信美好的事情即将发生

文章目录
前言
本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长
一、询问学号
1.1题目
链接:询问学号

1.2算法原理
这道题就是用数组存储每一个进来的学生,数组的下标表示同学是第 i 个进入教室的
1.3代码
1.3.1数组版本
#include <iostream>
using namespace std;
const int N = 2e6 + 10;
int a[N];
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i];
while (m--)
{
int x;
cin >> x;
cout << a[x] << endl;
}
return 0;
}
1.3.2vector
#include <iostream>
#include <vector>
using namespace std;
const int N = 2e6 + 10;
vector<int> a(N);
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i];
while (m--)
{
int x;
cin >> x;
cout << a[x] << endl;
}
return 0;
}
二、寄包柜
2.1题目
链接:寄包柜

2.1算法原理
解法就是如果是一就把k放到第i个柜子的第j个格子如果是2输出即可
注意:这道题ai是未知的使用二维数组会报错(数组开辟空间过大),故使用vector,因为vector数组在开辟空间下标从0开始,故当a[i].size() <= j时便要扩容到j+1即可
2.3代码
#include <iostream>
#include <vector>
using namespace std;
const int N = 1e5 + 10;
vector<int> a[N]; //创建n个柜子
int main()
{
int n, q;
cin >> n >> q;
while (q--)
{
int i, j, k, op;
cin >> op >> i >> j;
if (op == 1)
{
cin >> k;
if (a[i].size() <= j) //vector创建从下标0开始
a[i].resize(j + 1);
a[i][j] = k;
}
else if (op == 2)
cout << a[i][j] << endl;
}
return 0;
}
三、合并两个有序数组
3.1题目
链接:合并两个有序数组

3.2算法原理
可以创建⼀个辅助数组temp,然后用两个指针分别指向两个数组。每次拿出⼀个较小的元素放在辅助数组中,直到把所有元素全部放在辅助数组中。最后把辅助数组的结果覆盖到nums1中
3.3代码
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
vector<int> temp(m + n);
int cur1 = 0,cur2 = 0,i = 0;
while(cur1 < m && cur2 < n)
{
if(nums1[cur1] <= nums2[cur2])
temp[i++] = nums1[cur1++];
else
temp[i++] = nums2[cur2++];
}
while(cur1 < m)
{
temp[i++] = nums1[cur1++];
}
while(cur2 < n)
temp[i++] = nums2[cur2++];
for(int i = 0;i < m + n;i++)
nums1[i] = temp[i];
}
};
总结 — 每日励志时刻

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)