力扣面试150题--只出现一次的数字II

Day 92

题目描述

思路

初次思路 :想不出来 哈哈哈指挥hash 就不放出来丢人了
题解思路 :这个做法是每次确定一个位是否为答案为1 的位

具体是这样的:由于除了答案外每个数字都会出现3次,那么我们不考虑答案的情况,那么一个二进制位的可能为0或者1,将所有数组中(排除答案)在这个位的值相加必然是3的倍数二进制位为0无所谓
基于这点,如果某个位数不是3的倍数,是不是就说明答案在这个位是1,于是有了以下做法

java 复制代码
class Solution {
    public int singleNumber(int[] nums) {
        int ans = 0;//存放结果
        for (int i = 0; i < 32; ++i) {
            int total = 0;//记录该二进制位的值之和
            for (int num: nums) {
                total += ((num >> i) & 1);//右移后取最低位(即为i循环的这位的值)
            }
            if (total % 3 != 0) {//如果这个位所有的值之和不是3的倍数,那么答案这位就是1
                ans |= (1 << i);//那就将1左移到这位,与其进行或运算(低位全为0,或不会改变低位的结果)
            }
        }
        return ans;
    }
}
相关推荐
小欣加油7 小时前
leetcode56 合并区间
c++·算法·leetcode·职场和发展
lqqjuly7 小时前
前沿算法深度解析(二)
人工智能·算法·机器学习
不懂数据的小白7 小时前
面试题一:【二】异动分析(诊断)
面试
Aphasia3118 小时前
https连接传输流程
前端·面试
徐小夕8 小时前
万字长文!千万级文档 RAG 知识库系统落地实践
前端·算法·github
akunkuntaimei8 小时前
2026年高考数学各省真题及答案(完整版)
算法·高考
kyriewen8 小时前
CSS Container Queries:彻底告别 @media 写到手软,附 5 个真实布局案例
前端·css·面试
Hello:CodeWorld9 小时前
C 风格变参 vs C++ 变参模板:核心区别与选型指南
c语言·c++·算法
8Qi810 小时前
LeetCode 516:最长回文子序列
算法·leetcode·职场和发展·动态规划
mONESY11 小时前
JavaScript 栈、队列、数组与链表核心知识点总结
javascript·面试