$$\color{red}{算法}\color{blue}{基础课}\color{purple}{笔记and题解}\color{green}{汇总}$$
笔记:
到此双指针部分就结束啦!真开心
这题就是和归并排序一样的模式:指向两个序列的双指针算法。(其实是单指针吧。。。)
因为序列是有序的,所以我们只要从头往后扫描b数组,只要有一个a中的元素匹配不上,就是“失配”。
否则是匹配的。
代码:
#include <bits/stdc++.h>
using namespace std;
int n, m, a[100010], b[100010];
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int j = 1; j <= m; j++) scanf("%d", &b[j]);
int j = 1;
for (int i = 1; i <= n; i++) {
while (b[j] != a[i] && j <= m) j++;
if (j > m) {puts("No"); return 0;}
j++;
} puts("Yes");
return 0;
}
和我想法一样
一样 XD
本以为我的想法不对,结果与大佬的想法一样(^-^)V,赶快去调试一下
哪里错了啊
#include [HTML_REMOVED]
using namespace std;
int n, m, a[100010], b[100010];
int main() {
scanf(“%d%d”, &n, &m);
for (int i = 1; i <= n; i) scanf(“%d”, &a[i]);
for (int j = 1; j <= m; j) scanf(“%d”, &b[j]);
}
是不是下标问题,看一下
你这个 while 循环结束后应该先进行j++
妙啊