问题描述:
给你一个数组,元素非严格递增,找出其中绝对值不相等的元素个数,举例:
a = [-3,-2,0,2,3]
返回1 [0]
a = [-3,-3,-3,0,2,3]
返回2, [0,2]
思路描述:
采用双指针法,判断两个元素的绝对值,如果相等则加入计数器,如果不等,则绝对值大的移动,此时注意:有可能移动后的元素和移动前的元素相等,需要加入计数器
代码:
public int countUniq(int[] nums) {
int l = 0, r = nums.length - 1;
int cnt = 0;
while (l < r) {
int m = Math.abs(nums[l]), n = Math.abs(nums[r]);
if (m == n) {
l++;
r--;
cnt += 2;
while (l < r && nums[l] == nums[l - 1]) {
l++;
cnt += 1;
}
while (l < r && nums[r] == nums[r + 1]) {
r--;
cnt += 1;
}
} else {
if (m < n) {
r--;
} else {
l++;
}
}
}
return nums.length - cnt;
}