Given an array of integers, every element appears twice except for one. Find that single one.

这个方法重来没见过,以后估计也不会再见了。。

1 public static int singleNumber(int[] A) {
2         int sum = 0;
3         for (int a : A) {
4             sum ^= a;
5         }
6         return sum;
7     }

本以为不会再见了,不过看到第二个,觉得位操作还是有些应用的。。。。


Given an array of integers, every element appears three times except for one. Find that single one.

还是位操作,但和上面不能一样了。思路是,一个数如果出现了三次,那么这个数的每一位都会出现三次。那么我们可以统计下每一位一共出现多少次,再将这个数模3,剩下的数就是最后只出现一次的数。

具体实施时有两种方法:

1. 按照每一位的顺序进行统计。先统计第一位一共出现多少次,模3后记录下来,然后第二位。。。。。

 1 public int singleNumber(int[] A) {
 2         int result = 0;
 3         for (int i=0; i<32; i++) {
 4             int count = 0;
 5             for (int a : A) {
 6                 if (((a>>i)&1) == 1)
 7                     count++;
 8             }
 9             result += (count%3)<<i;
10         }
11         return result;
12     }

2. 用三个整形数,one,two,three分别表示出现一次的有哪些位,出现两次的哪些,出现三次的。。。

最后one所代表的就是只出现一次的数。

再更新one,two,three的时候要注意顺序。首先要更新的是two。因为two等于上一次只出现一次的位 & 当前数字包含1的位。所以不能先更新one。

当three中某些位出现1时,把one和two中的相应的位清0。

 1 public int singleNumber(int[] A) {
 2         int one=0, two=0, three=0;
 3         for (int a : A) {
 4             two |= one & a;
 5             one ^= a;
 6             three = one & two;
 7             one &= ~three;
 8             two &= ~three;
 9         }
10         return one;
11     }

转载于:https://www.cnblogs.com/longhorn/p/3525707.html

LeetCode: Single Number I II相关推荐

  1. LeetCode Single Number I / II / III

    [1]LeetCode 136 Single Number 题意:奇数个数,其中除了一个数只出现一次外,其他数都是成对出现,比如1,2,2,3,3...,求出该单个数. 解法:容易想到异或的性质,两个 ...

  2. [LeetCode]Single Number II

    今天室友推荐了一道LeetCode上面的练习题Single Number II,题目大概的意思是有一个整形的数组,里面只有一个数是出现一次的,其他的数都出现了三次,然后让把这个数找出来. 第一眼看到这 ...

  3. leetcode -day8 Copy List with Random Pointer Single Number I II

    五一中间断了几天,开始继续... 1.  Copy List with Random Pointer A linked list is given such that each node cont ...

  4. LeetCode Single Number II(位操作)

    问题:给出一个数组,其中只有一个数出现一次,其它数出现三次,找出出现一次的数 思路: 1.统计每位出现的次数,如果mod 3等于1,则将该位置为1,最后即得到出现一次的数. 2.使用三个变量来分别来表 ...

  5. [Leetcode] single number ii 找单个数

    Given an array of integers, every element appears three times except for one. Find that single one. ...

  6. leetcode - Single Number

    今天开始刷leetcode上的题,争取校招前刷过一遍,从AC率最高的题目开始刷,不废话了,看题 题目:Single Number Given an array of integers, every e ...

  7. leetcode Single Number python

    Single Number Given an array of integers, every element appears twice except for one. Find that sing ...

  8. LeetCode Single Number III(位操作)

    问题:给出一个数组,有两个数只出现一次,其它都出现两次. 思路:先对数组求异或,得到两个数异域的结果.然后确定差异的最低位.再将数组与这个差异位作异域,得到其中的一个数.再与异域结果异域后即得到另外一 ...

  9. LeetCode | Single Number II

    Given an array of integers, every element appears three times except for one. Find that single one. ...

最新文章

  1. c++成员函数的重载、覆盖、隐藏区别
  2. java 发送cookie_Java如何在Servlet中发送cookie?
  3. 2020年阿里云边缘计算和CDN的关键词
  4. MS SqlServer中少用但是好用的SQL语句
  5. 华夫饼为什么不松软_掌握这2个关键点,5个小细节,3个小技巧,保证烙饼松软又好吃...
  6. 如何用命令行查看服务器型号,服务器查看内存命令行
  7. H5 手势滑动以及滚动相关资料
  8. Spring Boot 集成Shiro和CAS
  9. Golang让协程交替输出
  10. 安装WIN10系统时“谁将会使用这台电脑”输入卡死状态的问题
  11. 走出误区,老杨命运发生了转折
  12. 前端字体图标的使用总结
  13. unraid个人服务器使用指南——持续更新中
  14. 论文笔记《Combining Events and Frames Using Recurrent Asynchronous Multimodal Networks for Monocular ...》
  15. 重金属深度处理,低浓度镍离子去除技术
  16. 计算机二级vb考试大纲与样卷,全国高校计算机等级考试广西二级VB考试大纲和模拟试卷.doc...
  17. 基于Java毕业设计校园社团管理平台源码+系统+mysql+lw文档+部署软件
  18. 贸然的对音乐版权进行维护,这种激进的方式将如何收场?
  19. 鸿蒙3部曲先看哪部,“隋唐三部曲”“鸿蒙三部曲”“斗罗四部曲”谁才是网文巅峰之作...
  20. 【python】pyc文件反编译为py文件

热门文章

  1. Java教程:Java break语句:跳出循环
  2. java中使用httpget_如何在Java中进行HTTP GET?
  3. html 搜索 高亮效果,html5输入框高亮效果
  4. node vue 合并项目_吐血整理最佳实践:SpringBoot整合Vue前后端分离开发
  5. python正则替换查询_使用Python中的正则表达式进行搜索和替换
  6. python获取的html转换为json,python读取XML格式文件并转为json格式
  7. 比赛中学习(1)-使用python将大量图片重命名
  8. Bias-Variance Tradeoff解释
  9. Spring源码分析之Aop中拦截器,适配器,通知之间的关系
  10. VC 运行时库 /MD、/MDd 和 /MT、/MTd