第 2 章 顺序表和 vector

  1. P3156 【深基15.例1】询问学号
cpp 复制代码
#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;
}
  1. P3613 【深基15.例2】寄包柜
cpp 复制代码
#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;
}
    1. 移动零
cpp 复制代码
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]);
}
}
};
    1. 颜⾊分类
cpp 复制代码
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]);
}
}
};
  1. 合并两个有序数组
cpp 复制代码
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--];
}
};
  1. The Blocks Problem
cpp 复制代码
#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;
}
相关推荐
yi0113 分钟前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
数据狐(Datafox)39 分钟前
淘宝图片搜索 API 落地实战:基于以图搜货搭建跨境电商选品系统
java·大数据·微服务
Escalating_xu2 小时前
【C 语言】数据在内存中的存储:补码、大小端、整型陷阱与 IEEE 754 全解析
java·c语言·网络
灯澜忆梦3 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
禾小西3 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
小蒋观天下3 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
一个风轻云淡3 小时前
GCC 和 GDB命令简单解读
java·linux·前端
省钱兄--zs3 小时前
西安24小时自助健身房解决方案实战:系统开发与部署全流程指南
java·spring boot·系统架构·intellij-idea·需求分析