题目: 一个排序数组求每个元素平方后不重复的元素个数。例如给一个数组:{-10, -10, -5, 0, 1, 5, 8, 10}。
解题思路: 我们可以使用双指针的办法,一个指针从头开始遍历,另一个指针从末尾开始遍历,用num来代表不重复元素的次数,每次遍历进行一次比较,这样的话时间复杂度为 ,空间复杂度为 。
接下来我们用C++进行编程:
int FindDiffetrntNum(vector<int>& numbers)
{
int length = numbers.size();
if(length <= 2)
return length;
int i = 0;
int j = length - 1;
int temp = abs(numbers[i]);
int num = 1;
while(i < j)
{
if(abs(numbers[i]) > abs(numbers[j]))
{
if(temp != abs(numbers[i]))
{
num++;
temp = abs(numbers[i]);
}
i++;
}
else
{
if(temp != abs(numbers[j])
{
num++;
temp = abs(numbers[j])
}
j--;
}
}
return num;
}