给你一个有序整数数组,数组中的数可以是正数、负数、零,请实现一个函数,这个函数返回一个整数:返回这个数组所有数的平方值中有多少种不同的取值。举例:
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
}

本文介绍了一种算法,该算法接收一个包含正数、负数和零的有序整数数组,并通过双指针技术返回数组中所有元素平方后的不同数值数量。举例来说,对于数组[-1,0,1,2,3],其平方后的不同值为1,0,4,9,因此返回4。
5557

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



