算法题_一个排序数组求每个元素平方后不重复的元素个数

题目: 一个排序数组求每个元素平方后不重复的元素个数。例如给一个数组:{-10, -10, -5, 0, 1, 5, 8, 10}。

解题思路: 我们可以使用双指针的办法,一个指针从头开始遍历,另一个指针从末尾开始遍历,用num来代表不重复元素的次数,每次遍历进行一次比较,这样的话时间复杂度为 O ( n ) O(n) ,空间复杂度为 O ( 1 ) O(1)

接下来我们用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;
}
发布了156 篇原创文章 · 获赞 48 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Rocky6688/article/details/105027737