力扣面试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;
    }
}
相关推荐
故事和你917 分钟前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
qq_4232339019 分钟前
C++与Python混合编程实战
开发语言·c++·算法
TracyCoder12330 分钟前
LeetCode Hot100(19/100)——206. 反转链表
算法·leetcode
m0_7155753431 分钟前
分布式任务调度系统
开发语言·c++·算法
测试涛叔1 小时前
金三银四软件测试面试题(800道)
软件测试·面试·职场和发展
naruto_lnq1 小时前
泛型编程与STL设计思想
开发语言·c++·算法
踩坑记录1 小时前
leetcode hot100 94. 二叉树的中序遍历 easy 递归 dfs
leetcode
zxsz_com_cn1 小时前
设备预测性维护算法分类及优劣势分析,选型指南来了
算法·分类·数据挖掘
m0_748708052 小时前
C++中的观察者模式实战
开发语言·c++·算法