给你一个有序整数数组,数组中的数可以是正数、负数、零,请实现一个函数,这个函数返回一个整数:返回这个数组所有数的平方值中有多少种不同的取值。举例:
nums = {-1,1,1,1},
那么你应该返回的是:1。因为这个数组所有数的平方取值都是1,只有一种取值
nums = {-1,0,1,2,3}
你应该返回4,因为nums数组所有元素的平方值一共4种取值:1,0,4,9
解题思路
- 双指针向 0 靠近
func abs(a int) int {
if a >= 0 {
return a
}
return -a
}
func differentPow(nums []int) int {
if len(nums) == 0 {
return 0
}
left := 0
right := len(nums) - 1
cnt := 0
for left <= right {
if nums[left] == nums[right] {
cnt++
break
}
if abs(nums[left]) == abs(nums[right]) {
for left <= right && left+1 < len(nums) && nums[left] == nums[left+1] {
left++
}
left++
for left <= right && right-1 >= 0 && nums[right] == nums[right-1] {
right--
}
right--
} else if abs(nums[left]) < abs(nums[right]) {
for left <= right && right-1 >= 0 && nums[right] == nums[right-1] {
right--
}
right--
} else {
for left <= right && left+1 < len(nums) && nums[left] == nums[left+1] {
left++
}
left++
}
cnt++
}
return cnt
}