题目描述:

Single Number

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

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

Single Number II

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

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

题目的意思都很直白,就是一个数组中只有一个元素只出现一次,其他都出现了两(三)次,求那个元素是什么。

我们首先从第一个问题开始思考,要在比较快的时间内找到只有一个的数,我们可以想到几种方式:

首先最容易想到的就是先排个序,那样就直接一遍遍李青松得出结果,但是排序的复杂度最快也就nlogn(基数排序类除外),所以这种方式在实践复杂度上来说不行(不过你只是想过题的话这种方法还是可以的)。

然后我们会想到时间换空间,也就是用一个标记数组进行操作,每次读入一个数字就把表技术组的相应位置为标记值,并且考虑到数字的范围问题我们还可以通过合适的hash策略进行求解,这种方法除了在实现上需要考虑到合适的hash函数之外应该都是不错的。知识由于表技术组的存在,需要o(n)的存储空间,还不是一个足够好的方法。

最后,我们考虑到除了我们要的那个值其他的值都会出现两次,就想到如果那两个一样的直接抵消了就好了,那么剩下的就是我们所需要的那个数了,那么有什么能干到这一点?对,就是位运算--异或,我们知道异或的运算法则是相同则为零,不同则唯一。并且位运算的结果和顺序是没有关系的,那么我们把两个相同的值疑惑起来结果必然为零,于是最后剩下的就是我们要的那个数了,代码如下:

那么我们现在来看第二个题,这个题与上面的不同就在那个三上面,分析一下我们发现,对于我们上面提到的第一种和第二种不优秀的解法没什么影响(往往不是最优秀的解法通用性都比较好)。但是第三种解法已经不能用了

分析一下发现我们已经不可能直接向上面那样用任意一种位运算求出这个解了,于是乎哀叹要是另外有那么个运算xxx是“有三个相同的则为0,否则为一”那就好了,我们就可以按照上一题一样的思路进行求解了。不过这个确实不存在,但是我们可以自己实现啊,当然直接实现一个这么高档的位运算符有点难,那我们就一位一位来吧。也就是说一位一位判断是不是出现了三次的倍数,是的话我们就置0,否则置1.代码如下:

当然由于位运算十分精妙肯定是还有很多不同解法了,但是我觉得上面的两种还是比较易于思考和理解的。希望能有所帮助

【leetcode】Single Number && Single Number II(ORZ 位运算)的更多相关文章

  1. 【LeetCode】52. N-Queens II(位运算)

    [题意] 输出N皇后问题的解法个数. [题解] 解法一:传统dfs回溯,模拟Q放置的位置即可,应该不难,虽然能通过,但是时间复杂度很高. 解法二:位运算大法好! 首先要明白这道题里两个核心的位运算 1 ...

  2. LeetCode | 289. 生命游戏(原地算法/位运算)

    记录dalao的位运算骚操作 根据百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细 ...

  3. LeetCode 201 Bitwise AND of Numbers Range 位运算 难度:0

    https://leetcode.com/problems/bitwise-and-of-numbers-range/ [n,m]区间的合取总值就是n,m对齐后前面一段相同的数位的值 比如 5:101 ...

  4. leetcode 201. Bitwise AND of Numbers Range(位运算,dp)

    Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers ...

  5. 剑指 Offer 56 - II. 数组中数字出现的次数 II + 位运算

    剑指 Offer 56 - II. 数组中数字出现的次数 II Offer_56_2 题目详情 解题思路 java代码 package com.walegarrett.offer; /** * @Au ...

  6. 【LeetCode】137. Single Number II 解题报告(Python)

    [LeetCode]137. Single Number II 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/single- ...

  7. LeetCode - 136. Single Number - ( C++ ) - 解题报告 - 位运算思路 xor

    1.题目大意 Given an array of integers, every element appears twice except for one. Find that single one. ...

  8. [Leetcode]Single Number && Single Number II

    Given an array of integers, every element appears twice except for one. Find that single one. 非常简单的一 ...

  9. 【一天一道LeetCode】#260. Single Number III

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

随机推荐

  1. 3D音效

    摘自:http://baike.baidu.com/view/1330437.htm?fr=aladdin 3D音效就是用扬声器仿造出似乎存在但是虚构的声音.例如扬声器仿造头顶上有一架飞机从左至右飞过 ...

  2. poj 1847( floyd && spfa )

    http://poj.org/problem?id=1847 一个水题,用来熟悉熟悉spfa和floyd的. 题意:有m条的铁路,要从x,到y, 之后分别就是条铁路与其他铁路的交点.第一个输入的为有n ...

  3. Java for LeetCode 237 Delete Node in a Linked List

    Java实现如下: public class Solution { public void deleteNode(ListNode node) { if(node==null||node.next== ...

  4. ABAP 供应商、工厂对应公里数维护

    *&---------------------------------------------------------------------* *& Report  ZMMR011 ...

  5. jquery after append appendTo三个函数的区别

    jq文档的说明是 1.after函数 定义和用法: after() 方法在被选元素后插入指定的内容. 语法: $(selector).after(content) 实例: <html> & ...

  6. 【hadoop2.6.0】利用JAVA API 实现数据上传

    原本的目的是想模拟一个流的上传过程,就是一边生成数据,一边存储数据,因为能用上HADOOP通常情况下原本数据的大小就大到本地硬盘存不下.这一般是通过把数据先一部分一部分的缓冲到本地的某个文件夹下,hd ...

  7. LightOJ 1197 Help Hanzo(区间素数筛选)

    E - Help Hanzo Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit ...

  8. [Android Pro] root用户删除文件提示:Operation not permitted

    reference to : http://blog.csdn.net/evanbai/article/details/6187578 一些文件看上去可能一切正常,但当您尝试删除的时候,居然也会报错, ...

  9. [Ubuntu] ubuntu10.04系统维护之Wine的安装

    在介绍安装wine之前,我想是有必要先介绍一下Wine的.当然,如果是Liunx的高手,我想是没必要看的,但是对于笔者这样的菜鸟级人物还是需要看一下的. Wine是一款Liunx下的模拟器软件,但是W ...

  10. NPOI 1.2.4教程 –日期函数

    //Excel中有非常丰富的日期处理函数,在NPOI中同样得到了很好的支持.如下图: using NPOI.HSSF.UserModel; using NPOI.HPSF; using NPOI.PO ...