第 2 章 顺序表和 vector
2026/7/24 15:53:16 网站建设 项目流程
1.P3156 【深基15.例1】询问学号
#include<iostream> #include<vector> using namespace std; const int N = 2e6+5; vector<int> a(N); int main(){ int n,m; cin >> n >> m; for(int i = 1;i<=n;i++) cin >> a[i]; int x; while(m--){ cin >> x; cout << a[x]<<endl; } return 0; }
2.P3613 【深基15.例2】寄包柜
#include<iostream> #include<vector> using namespace std; const int N = 1e5+5; vector<int> a[N]; int main(){ int n,q; cin >> n >> q; while(q--){ int op,i,j,k;cin >> op >> i >> j; if(op == 1){ cin >> k; if(a[i].size()<=j){ a[i].resize(j+1); } a[i][j] = k; } else cout << a[i][j]<< endl; } return 0; }
3.283. 移动零
class Solution { public: void sortColors(vector<int>& nums) { int n = nums.size(); int left = -1, right = n, i = 0; while(i < right) { if(nums[i] == 0) swap(nums[++left], nums[i++]); else if(nums[i] == 1) i++; else swap(nums[--right], nums[i]); } } };
4.75. 颜⾊分类
class Solution { public: void sortColors(vector<int>& nums) { int n = nums.size(); int left = -1, right = n, i = 0; while(i < right) { if(nums[i] == 0) swap(nums[++left], nums[i++]); else if(nums[i] == 1) i++; else swap(nums[--right], nums[i]); } } };
5.合并两个有序数组
class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int cur1 = m - 1, cur2 = n - 1, cur = m + n - 1; while(cur1 >= 0 && cur2 >= 0) { if(nums1[cur1] >= nums2[cur2]) nums1[cur--] = nums1[cur1--]; else nums1[cur--] = nums2[cur2--]; } while(cur2 >= 0) nums1[cur--] = nums2[cur2--]; } };
6.The Blocks Problem
#include <iostream> #include <vector> using namespace std; const int N = 30; typedef pair<int, int> PII; int n; vector<int> p[N]; // 创建 n 个放⽊块的槽 PII find(int x) { for(int i = 0; i < n; i++) { for(int j = 0; j < p[i].size(); j++) { if(p[i][j] == x) { return {i, j}; } } } } void clean(int x, int y) { // 把 [x, y] 以上的⽊块归位 for(int j = y + 1; j < p[x].size(); j++) { int t = p[x][j]; p[t].push_back(t); } p[x].resize(y + 1); } void move(int x1, int y1, int x2) { // 把 [x1, y1] 及其以上的⽊块放在 x2 上⾯ for(int j = y1; j < p[x1].size(); j++) { p[x2].push_back(p[x1][j]); } p[x1].resize(y1); } int main() { cin >> n; // 初始化 for(int i = 0; i < n; i++) { p[i].push_back(i); } string op1, op2; int a, b; while(cin >> op1 >> a >> op2 >> b) { // 查找 a 和 b 的位置 PII pa = find(a); int x1 = pa.first, y1 = pa.second; PII pb = find(b); int x2 = pb.first, y2 = pb.second; if(x1 == x2) continue; // 处理不合法的操作 if(op1 == "move") // 把 a 上⽅归位 { clean(x1, y1); } if(op2 == "onto") // 把 b 上⽅归位 { clean(x2, y2); } move(x1, y1, x2); } // 打印 for(int i = 0; i < n; i++) { cout << i << ":"; for(int j = 0; j < p[i].size(); j++) { cout << " " << p[i][j]; } cout << endl; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询