一个数组中,只有两个数单独出现,其他数都是成对出现的,找出这两个数。
方法一:利用位运算
#include<stdio.h> int find_one_bit(int num) { int i=0; while(num) { if(num%2==1) { return i; } else { i++; } num/=2; } } void find_two_num(int arr[],int len) { int i=0; int ret=0; int pos=0; int num1=0; int num2=0; for(i=0;i<len;i++) { ret^=arr[i]; } pos=find_one_bit(ret); for(i=0;i<len;i++) { if(((arr[i]>>pos) & 1)==1) { num1^=arr[i]; } else { num2^=arr[i]; } } printf("num1=%d,num2=%d",num1,num2); } int main() { int arr[]={1,2,3,4,4,3,2,1,5,6}; int len=sizeof(arr)/sizeof(arr[0]); find_two_num(arr,len); printf("\n"); return 0; }
方法二:比较法(遍历数组)
#include<stdio.h> int main() { int arr[]={1,2,3,4,4,3,5,1,5,6}; int i=0; int j=0; int len=sizeof(arr)/sizeof(arr[0]); for(i=0;i<len;i++) { int count=0; for(j=0;j<len;j++) { if(arr[i]==arr[j]) { count++; } } if(count==1) { printf("%d\n",arr[i]); } } return 0; }
时间: 2024-12-22 13:09:27