(leetcode算法题)137. 只出现一次的数字 II

处理这种数据集中只有一个数出现的频次为1,其他数出现的频次均为k的题目

往往都是使用位运算的进行求解

假设 target在数据集中只出现了1次,其他数据n1, ... nj都出现了 k 次,

考虑数据集中所有数据的第 i 位的取值,那么将会有j + 1个比特位,其中如果n1 到 nj中有且仅有 x个数字在第 i 位取1,其他的数字在第 i 位取0

那么将这 j 个数全部相加,得到的结果为α,α一定是 k 的倍数,

那么((target >> i ) & 1 + α) % k一定等于(target >> i ) & 1

所以将这j + 1个比特位相加之后对k 取模,得到的一定是 target在第 k位的取值

cpp 复制代码
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ret = 0;
        for(int i = 0; i < 32; i++){
            int tmp = 0;
            for(auto & num : nums){
                tmp += (num >> i) & 1;
            }
            ret += ((tmp % 3) << i);
        }
        return ret;
    }
};
相关推荐
一匹电信狗7 小时前
【C++】手搓AVL树
服务器·c++·算法·leetcode·小程序·stl·visual studio
月疯7 小时前
离散卷积,小demo(小波信号分析)
算法
敲代码的瓦龙8 小时前
西邮移动应用开发实验室2025年二面题解
开发语言·c++·算法
RTC老炮8 小时前
webrtc弱网-RembThrottler类源码分析及算法原理
网络·算法·webrtc
野蛮人6号8 小时前
力扣热题100道之73矩阵置零
算法·leetcode·矩阵
野蛮人6号8 小时前
力扣热题100道之238除自身以外数组的乘积
算法·leetcode·职场和发展
坚持编程的菜鸟8 小时前
LeetCode每日一题——缀点成线
c语言·算法·leetcode
派大星爱吃猫9 小时前
直接插入排序详解
算法·排序算法·直接插入排序
一只侯子9 小时前
Tuning——CC调试(适用高通)
开发语言·图像处理·笔记·学习·算法
csdn_aspnet9 小时前
直圆锥(Right Circular Cone)
算法·圆锥