力扣面试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;
    }
}
相关推荐
crescent_悦15 分钟前
PTA L1-020 帅到没朋友 C++
数据结构·c++·算法
豆奶特浓626 分钟前
Java面试模拟:当搞笑程序员谢飞机遇到电商秒杀与AIGC客服场景
java·spring boot·微服务·面试·aigc·高并发·电商
鳄鱼儿39 分钟前
密码算法的OID查阅
算法
拉不动的猪1 小时前
Axios 请求取消机制详解
前端·javascript·面试
lxh01131 小时前
螺旋数组题解
前端·算法·js
铭哥的编程日记1 小时前
《斩获字节跳动offer 最详细的面试真题与破解思路》第一期
面试·职场和发展
大侠课堂1 小时前
互联网大厂面试题100道-阿里百度篇-完整版
百度·阿里云·面试·面试题·阿里
czlczl200209252 小时前
算法:二叉树的公共祖先
算法
Heo2 小时前
关于XSS和CSRF,面试官更喜欢这样的回答!
前端·javascript·面试
稚辉君.MCA_P8_Java3 小时前
Gemini永久会员 Java动态规划
java·数据结构·leetcode·排序算法·动态规划