问题:
有一组数据,假设除了某一个元素出现了一次外,其余元素都出现了两次,找出这个元素。
如:
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变量。
如果在上述的基础上,要求不占用额外空间,应怎样解答?