首页 > 试题广场 >

数组中只出现一次的数(其它数出现k次)

[编程题]数组中只出现一次的数(其它数出现k次)
  • 热度指数:31469 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 n 的整型数组 arr 和一个整数 k(k>1) 。
已知 arr 中只有 1 个数出现一次,其他的数都出现 k 次。
请返回只出现了 1 次的数。

数据范围:  ,  , 
进阶:时间复杂度 ,空间复杂度 



示例1

输入

[5,4,1,1,5,1,5],3 

输出

4 
示例2

输入

[2,2,1],2

输出

1
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param arr int一维数组 
 * @param arrLen int arr数组长度
 * @param k int 
 * @return int
 */
int foundOnceNumber(int* arr, int arrLen, int k ) {
    // write code here
    int m=0;
    if(k%2==0){
        for(int i=0;i<arrLen;i++)
             m=m^arr[i];
        return m;
    }
    else{
        int ans=0;
        int flag=1;
        while(m<32){
            int count=0;
            for(int j=0;j<arrLen;j++){
                count+=(arr[j])&flag;
                arr[j]=(arr[j])>>1;
            }
            if(count%k!=0){
                ans+=1<<m;
            }
            m++;

            
        }
       return ans;
    }
}

发表于 2022-12-23 22:03:34 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param arr int一维数组 
 * @param arrLen int arr数组长度
 * @param k int 
 * @return int
 */
int foundOnceNumber(int* arr, int arrLen, int k ) {
    // write code here
    int result = 0;
    for(int i=0;i<32;i++) {
        int count = 0;
        for(int j=0;j<arrLen;j++) {
            if(arr[j]&(1<<i)) {
                count++;
            }
        }
        if(count % k ==1) result ^= (1<<i);
    }
    return result;
} 
发表于 2021-08-18 20:23:27 回复(0)

问题信息

上传者:牛客301499号
难度:
2条回答 4094浏览

热门推荐

通过挑战的用户

查看代码