思路贴在代码注释中了,不难理解,欢迎交流
//排序数组,平方后,数组当中有多少不同的数字(相同算一个)
// 思路:
// 1. 初始化两个左右坐标,指向数组的首尾,向中间遍历,初始化 pre 变量为 abs(nums[0]-1) 表示上一次记录过的数字, res=0
// 2. 左边比右边的绝对值大时,左边向右遍历,若左侧数字没出现过,则 res++,pre = 左侧数字
// 3. 右边比左边的绝对值大或等于时,右边向左遍历,若右侧数字没出现过,则 res++,pre = 右侧数字
int findDiff(vector<int> &nums){
int res = 0;
int left = 0, right = nums.size()-1;
int pre = abs(nums[0]-1);
while(left <= right){
if(abs(nums[left]) > abs(nums[right])){
if(pre != abs(nums[left])){
res++;
pre = abs(nums[left]);
}
left++;
}
else{
if(pre != abs(nums[right])){
res++;
pre = abs(nums[right]);
}
right--;
}
}
return res;
}