算法笔记-第四章-双指针
什么是双指针算法
2-SUM-双指针
//双指针算法
//无敌了这个思想,简单的引入什么是双指针算法
#include<iostream>
const int N = 10000;
int n, k, a[N];
int two()
{
int couter = 0;
int i = 0, j = n - 1;
while (i < j)
{
if (a[i] + a[j] == k)
{
couter++;
i++;
j--;
}
else if (a[i] + a[j] < k)
{
i++;
}
else {
j--;
}
}
return couter;
}
int main()
{
scanf_s("%d%d", &n, &k);
for (int i = 0; i < n; i++) {
scanf_s("%d", &a[i]);
}
printf("%d", two());
return 0;
}
序列合并
利用while循环进行的,但是用for方法更好 (简单)
#include <cstdio>
const int MAXN = 100000;
int n, a[MAXN];
int m, b[MAXN];
int mergedNums[MAXN * 2];
int merge() {
int i = 0, j = 0, counter = 0;
while (i < n && j < m) {
if (a[i] < b[j]) {
mergedNums[counter++] = a[i++];
} else {
mergedNums[counter++] = b[j++];
}
}
while (i < n) {
mergedNums[counter++] = a[i++];
}
while (j < m) {
mergedNums[counter++] = b[j++];
}
return counter;
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (int i = 0; i < m; i++) {
scanf("%d", &b[i]);
}
int counter = merge();
for (int i = 0; i < counter; i++) {
printf("%d", mergedNums[i]);
if (i < counter - 1) {
printf(" ");
}
}
return 0;
}