双指针在数轴上的应用

在数轴上,有两个变量,它们就是数轴上的两个指针。

启初,两个指针分别指着数轴上的最大数和最小数,左指针指的是负数区域最小的数,右指针指的是正数区域最大的数,比如这个数轴:

-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;
}

这就是我对数轴上的双指针的理解,大家如果有意见,尽管发表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值