首页 > 其他分享 >剑指 Offer 56 - II. 数组中数字出现的次数 II(状态转移 位运算)

剑指 Offer 56 - II. 数组中数字出现的次数 II(状态转移 位运算)

时间:2022-12-12 19:35:50浏览次数:59  
标签:数字 nums int Offer 56 two II num


 

 

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

难度中等38

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

 

示例 1:


输入:nums = [3,4,3,3] 输出:4


示例 2:


输入:nums = [9,1,7,9,7,9,7] 输出:1


 

 

解题思路:

我们可以发现,最后的数字假如第i位是1(二进制表示),那么第i位肯定有3*x+1个1,那么我们就思考第i位能不能进行转台转移。最终转移到一个合法的状态。

剑指 Offer 56 - II. 数组中数字出现的次数 II(状态转移 位运算)_数组

转移到红色框内的状态才是我们想要的。注意,假如我们想根据真值表表示一个数,例如:A=0 B=1 C=0我们想表示出C用A,B,那么我们可以写为~(~A & B).

class Solution {
public:
int singleNumber(vector<int>& nums) {
int one=0,two=0;
for(auto num:nums){
int nxo = (one^(num))&(~two);
int nxt = (num^two)&(~((~two)&(~one)));
two=nxt;
one=nxo;
}
return one;
}
};

 

标签:数字,nums,int,Offer,56,two,II,num
From: https://blog.51cto.com/u_15910522/5931536

相关文章

  • 剑指offer面试题38. 字符串的排列(回溯)
    ​​面试题38.字符串的排列​​难度中等48输入一个字符串,打印出该字符串中字符的所有排列。 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。 示例:输入:s=......
  • 剑指offer 数组中的逆序对(归并排序)
    ​​剑指Offer51.数组中的逆序对​​难度困难176在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的......
  • 剑指offer 数据流中的中位数(思维,堆)
    题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值......
  • 剑指offer 字符流中第一个不重复的字符(思维,队列)
    题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“g......
  • 剑指offer 二叉搜索树的第k个结点(二叉搜索树的中序遍历)
    题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如,(5,3,7,2,4,6,8)  中,按结点数值大小顺序第三小结点的值为4。解题思路:我们知道二叉搜索树的中序遍历就是排序好的数列......
  • 剑指offer 序列化二叉树
    题目描述请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可......
  • 剑指offer 对称的二叉树(思维)
    题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解题思路:正规的解法是传入两个节点,然后判断它们是不......
  • IIS 之 连接数、并发连接数、最大并发工作线程数、队列长度、最大工作进程数
    http://t.zoukankan.com/l1pe1-p-7742936.html一、IIS连接数一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,顾名思义即为IIS服务器可以同时容纳客户请求的最......
  • IIS 6 下配置以 FastCGI 跑 PHP
    环境:操作系统:Windows2003ServerSP2PHP版本:php-5.2.6-Win321.下载FastCGIForIIS6http://www.iis.net/d...环境:操作系统:Windows200......
  • itop3568开发板旋转uboot logo和内核logo
    修改设备树rk_android11.0_sdk/kernel/arch/arm64/boot/dts/rockchip/topeet_rk3568_lcds.dtsi文件。如果配套的屏幕是LVDS7寸屏幕或者LVDS10.1寸1024*600屏幕或......