在数轴上,有两个变量,它们就是数轴上的两个指针。
启初,两个指针分别指着数轴上的最大数和最小数,左指针指的是负数区域最小的数,右指针指的是正数区域最大的数,比如这个数轴:
-12, -9, -7, -5, -3, -1, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18
这是一个不标准的数轴,标准的数轴应该有原点、刻度和方向三个要素。
在这个数轴上,左指针指向-12,右指针指向18。
首先,我们要判断左指针指向的数和右指针指向的数哪个数的绝对值大,绝对值就是这个数到0的距离,例如,-12的绝对值是12,18的绝对值是18。
绝对值大的数,要把它的平方值放入一个结果数组,如果是右指针指着这个数,那右指针就指向它的前一个数,否则左指针指向它的后一个数,一直到两个指针都指向0为止。
下面是我的代码实现:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
LL n;
cin >> n;
vector<LL> arry(n, 0);
vector<LL> brry(n, 0);
for (LL i = 0; i < n; i++) {
cin >> arry[i];
}
LL left = 0, right = n - 1;
for (LL i = n - 1; i >= 0; i--) {
if (abs(arry[left]) >= abs(arry[right])) {
brry[i] = arry[left] * arry[left];
left++;
} else {
brry[i] = arry[right] * arry[right];
right--;
}
}
for (LL i = 0; i < n; i++) {
cout << brry[i] << ' ';
}
cout << endl;
return 0;
}
这就是我对数轴上的双指针的理解,大家如果有意见,尽管发表。

被折叠的 条评论
为什么被折叠?



