当前位置: 首页 > news >正文

剑指 Offer 56 - II. 数组中数字出现的次数 II

题目

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

在这里插入图片描述

思路

这题是剑指 Offer 56 - I. 数组中数字出现的次数的变体,本题只有一个数num出现一次,其余的均出现三次

三次的话使用异或消无法消除,首先进行一个转换:

  1. 首先,将所有数字都看成 32位 的二进制数;
  2. 接着,将数组中的所有数字相加。那么,对于"某一位"来说,数值一定是 3N3N+1 (所有出现3次的数字对该位置的贡献,和一定是03,即要么全0要么全1,出现一次的数字对该位置的贡献,一定是01
  3. 所以,对该位置的和,用3取余,结果就是出现一次的数字在该位置的值(这种解法是具有通用性的,即出现4次、5次、N次,直接用4、5、N取余即可。)

在这里插入图片描述
java代码如下:

class Solution{public int singleNumber(int[] nums){int res = 0;for(int i = 0 ; i < 32; i++){//对于int每一位int bit = 0;//计算该位上的和for(int num : nums){bit += ((num >> i) & 1);//有0出0,全1出1}//对3取余即为res在该位上的值res += ((bit % 3) << i);//左移相当于乘i}return res;}
}
http://www.lryc.cn/news/6180.html

相关文章:

  • C语言学习笔记(八): 自定义数据类型
  • Video Speed Controller谷歌视频加速插件——16倍速
  • VSCode 的下载安装及基本使用
  • 【操作系统】磁盘IO常见性能指标和分析工具实战
  • SpringMVC基础
  • 低代码开发平台|制造管理-质检管理搭建指南
  • 推荐一个.Ner Core开发的配置中心开源项目
  • Vue3+vite4使用mockjs进行模拟开发遇到的坑
  • 一起Talk Android吧(第四百九十三回:动画知识总结)
  • 腾讯云企业网盘正式入驻数字工具箱
  • 2.13练习
  • 【iOS】APP IM聊天框架的设计(基于第三方SDK)
  • centos安装FastDFS,集成到SpringBoot中
  • 看透react源码之感受react的进化
  • 【最优化理论】线性规划
  • 数据库测试的认知和分类
  • MQ中间件概念一览
  • 爱尔兰公司注册要求及条件
  • Java中如何打印对象内存地址?
  • CF1707E Replace
  • 【Hello Linux】Linux工具介绍 (make/makefile git)
  • 享元模式flyweight
  • Pulsar
  • 项目介绍 + 定长内存池设计及实现
  • Linux--线程安全的单例模式--自旋锁--0211
  • 图文解说S参数(进阶篇)
  • Sentinel源码阅读
  • 2023年浙江食品安全管理员考试真题题库及答案
  • Webstorm 代码没有提示,uniapp 标签报错
  • MySQL-Innodb引擎事务原理