找出一组数据中只出现一次的数据

问题:

有一组数据,假设除了某一个元素出现了一次外,其余元素都出现了两次,找出这个元素。

如:

array[] = {2, 3, 2, 5, 1, 4, 6, 3, 1, 6, 4}

在这个数组中,怎么找出这个只出现了一次的5呢?

解法:

依次拿出一个元素与其他元素进行比较,设置一个中间变量result,每次让resul等于该值,

根据是否有与其相同的值来改变result的值,最后根据result的值得出只出现了一次的元素。

代码:

#include <stdio.h>
#include <string.h>

int main(int argc, char const *argv[])
{
	int array[] = {2, 3, 2, 5, 1, 4, 6, 3, 1, 6, 4};
	int i = 0, j = 0;
	int result = 0;
	int length = 0;
	length = sizeof(array) / sizeof(array[0]);
	for(i = 0; i < length; i++){
		result = array[i];
		for(j = 0; j < length; j++){
			if(array[i] == array[j] & i != j){
				result = 0;
				break;
			}
			result = array[i];
		}
		if(result != 0)
			break;
	}
	printf("%d\n", result)
	return 0

该算法时间复杂度为:O(n^2),空间复杂度为:O(1)

Question:

上述方法占用了额外的空间:一个int型的result变量。

如果在上述的基础上,要求不占用额外空间,应怎样解答?

发布了88 篇原创文章 · 获赞 121 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43968080/article/details/103977019
今日推荐