Middle-题目11:137. Single Number II

原创 2016年05月31日 15:31:04

题目原文:
Given an array of integers, every element appears three times except for one. Find that single one.
题目大意:
给出一个数组,除了一个元素出现了一次外都出现了三次,找出这个单独的元素。
题目分析:
1. 朴素解法:这回使用HashMap统计每个元素出现次数,然后返回那个次数为1的。
2. 位运算解法:(参考higerzhang大神的博客)遍历32次每次记录某位的出现的次数,如果不能被三整除,说明那个出现一次的就在该位有值,那么ans 或该位一下就可以了。
源码:(language:java/c)
1. 朴素解法:

public class Solution {
    public int singleNumber(int[] nums) {
        HashMap<Integer,Integer> count=new HashMap<Integer,Integer>();
        for(int num:nums) {
            if(count.containsKey(num))
                count.put(num, count.get(num)+1);
            else
                count.put(num, 1);
        }
        for(Integer key:count.keySet())
            if(count.get(key)==1)
                return key;
        return 0;         
    }
}
  1. 位运算解法:
int singleNumber(int nums[], int numsSize) {
    int single = 0;
    for (int i = 0; i < 32; i++) {
        int cnt = 0, bit = 1 << i;
        for (int j = 0; j < numsSize; j++)
            if (nums[j] & bit) cnt++;
        if (cnt % 3 != 0)
            single |= bit;
    }
    return single;
}

成绩:
朴素解法:15ms,beats 10.87%,众数1ms,23.02%
位运算解法:12ms,beats 8.33%,众数8ms,48.61%
Cmershen的碎碎念:
HigherZhang的博客中还提到了第三种算法,我理解能力有限,一时间未能完全看明白,以后可以点击上面的链接再研究一番。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

LeetCode(137)Single NumberII

题目如下: Given an array of integers, every element appears three times except for one. Find that single...
  • feliciafay
  • feliciafay
  • 2014年02月09日 10:15
  • 3025

【LeetCode-面试算法经典-Java实现】【137-Single Number II(只字出一次的数字II)】

【137-Single Number II(只出现一次的数字II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given an array of integers, ...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月18日 06:24
  • 4154

LeetCode 137:Single Number II

Given an array of integers, every element appears three times except for one. Find that single one. ...
  • sunao2002002
  • sunao2002002
  • 2015年06月01日 22:36
  • 5019

[C++]LeetCode: 67 Single Number II

题目: Given an array of integers, every element appears three times except for one. Find that single...
  • cinderella_niu
  • cinderella_niu
  • 2015年01月04日 22:18
  • 655

leetcode-java-137. Single Number II

方法一: 用的容器map解决的问题,但是19ms 方法二: 参考别人的做法 可以给数组排序,然后判断挨着的三个是否相同public class Solution { public in...
  • github_34514750
  • github_34514750
  • 2016年06月28日 11:35
  • 352

LeetCode || Single Number II

Single Number II  Total Accepted: 12144 Total Submissions: 37399My Submissions Given an ...
  • jiadebin890724
  • jiadebin890724
  • 2014年04月09日 23:35
  • 18956

137. Single Number II

显现a的左起第i+1位: a & 1 把a的左起第i+1位置零:a &= ~(1 把a的左起第i+1位置1:result |= 1 创建一个长度为32的数组a,a[i]表示所有数字在i位出现的...
  • wusecaiyun
  • wusecaiyun
  • 2015年08月19日 00:43
  • 146

single-number、single-number2,数组中只出现一次的数字

题目描述:single-number1 一个数组中除了一个数字外,其余数字均出现两次,找出只出现一次的数字。 要求线性复杂度 方法:两个相同的数字异或得0,一个数字和0异或结果是它本身。 pu...
  • jingsuwen1
  • jingsuwen1
  • 2016年05月27日 20:17
  • 349

leecode 137. Single Number II

题意:给定一个数组,数组中存放多个三个数相同的数,其中一个数只有一个,例如这种的{1,2,2,2,3,3,3}。 解题思路:将数组排序后能够变成{1,2,2,2,3,3,3}这种形式,我设定一个数字...
  • jtracydy
  • jtracydy
  • 2016年08月29日 15:29
  • 177

LeetCode 137. Single Number II

Given an array of integers, every element appears three times except for one. Find that single one. ...
  • github_34333284
  • github_34333284
  • 2016年04月09日 00:51
  • 97
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目11:137. Single Number II
举报原因:
原因补充:

(最多只允许输入30个字)