代码实现:数据结构之数组当中唯一的k个数 k=1,2

#include <stdio.h>

//数组当中只出现一次的那个数
int getSingle(int* arr,int len){
    int single = 0,i;
    if(len == 1) return *arr;
    for(i=0;i<len;i++) single ^= arr[i];
    return single;
}

//数组当中只出现一次的两个数
void getSingleTwo(int*arr,int len,int* k1,int* k2){
    int diff = getSingle(arr,len);
    
    diff &= -diff;
    
    int i = 0;
    for(;i<len;i++){
        if(arr[i]&diff) {
            printf("1---%d
",arr[i]);  // 2,3,7  2 = (10) 3 = (11) 7 = (111)
            *k1 ^= arr[i];
        } else {
            printf("2---%d
",arr[i]);  // 1,4,9  1 = (1)  4 = (100) 9 = (1001)
            *k2 ^= arr[i];
        }
    }
    
    printf("singleTwo: %d,%d
",*k1,*k2);
}


int main () {
    int arr[] = {1,2,3,4,5,4,3,2,1};
    int arrTwo[] = {1,2,3,4,7,9,4,3,2,1};
    int k1 = 0,k2 = 0;
    int single = getSingle(arr,sizeof(arr)/sizeof(int));
    printf("single = %d
",single);
    getSingleTwo(arrTwo,sizeof(arrTwo)/sizeof(int),&k1,&k2);
    return 0;
}
原文地址:https://www.cnblogs.com/czsblog/p/12625701.html