题意:给一个序列,其中只有1个元素只出现1次,其他的都一定出现3次。问这个出现一次的元素是多少?

思路:

(1)全部元素拆成二进制,那么每个位上的1的个数应该是3的倍数,如果不是3的倍数,则ans的这个位肯定为1。

  22ms

 class Solution {
public:
int singleNumber(vector<int>& nums) {
int times[]={};
for(int i=; i<nums.size(); i++)
for(int j=; j<=; j++)
if( &(nums[i]>>j) )
times[j]++; int ans=;
for(int i=; i>=; i--)
{
ans<<=;
if(times[i]% ) ans|=;//如果有余数,则保障最低位为1
}
return ans;
}
};

AC代码

(2)用位运算。道理同方法一。为了方便理解,写复杂一点。共需要3个变量,s保存出现过2次的1,one保存出现1次的1,还有一个临时变量t做记录用。

  首先,如果s和one中同时出现1,视为该位已经出现了3的倍数个1,要将one和s中该位清零。因为s中的1代表该位已经出现了2次1。

  最后,one就是结果,表示一个只出现1次的元素。而s表示一个只出现2次的元素,当然,与此题无关。

 class Solution {
public:
int singleNumber(vector<int>& nums) {
int s=, one=;
for(int i=; i<nums.size(); i++)
{
s|=(~(one^nums[i]))&one;//保存出现了2次的1
one^=nums[i];
int t=s&one;//t所有为1的位都要在s和one中对应位清零,因为该位的1出现了3次,下面两步时清除工作。
s&=~t;
one&=~t;
}
return one;
}
};

AC代码

LeetCode Single Number II 单元素2的更多相关文章

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

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

  2. [LeetCode] Single Number II 单独的数字之二

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

  3. LeetCode——Single Number II(找出数组中只出现一次的数2)

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

  4. LeetCode:Single Number II

    题目地址:here 题目大意:一个整数数组中,只有一个数出现一次,其余数都出现3次,在O(n)时间,O(1)空间内找到这个出现一次的数 对于”只有一个数出现一次,其余数出现2次“的情况,很简单,只要把 ...

  5. [leetcode]Single Number II @ Python

    原题地址:http://oj.leetcode.com/problems/single-number-ii/ 题意:Given an array of integers, every element ...

  6. Leetcode Single Number II (面试题推荐)

    还记得<剑指offer>和<编程之美>等书上多次出现的找一个数组中仅仅出现一次的数那个题吗? leetcode也有这道题 链接here  相信大家都知道用异或在O(n)的时间复 ...

  7. [Leetcode] single number 找单个数

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

  8. [LeetCode] Single Number II 位运算

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

  9. LeetCode | Single Number II【转】

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

随机推荐

  1. 【HDOJ】【3709】Balanced Bumber

    数位DP 题解:http://www.cnblogs.com/algorithms/archive/2012/09/02/2667637.html dfs的地方没太看懂……(也就那里是重点吧喂!)挖个 ...

  2. NYOJ-32 组合数 AC 分类: NYOJ 2014-01-02 22:21 112人阅读 评论(0) 收藏

    #include<stdio.h> int num[100]; int pnum(int n,int v); int mv=0; int main(){ int n,v; scanf(&q ...

  3. UVALive 3977

    直接搜索,简单题: #include<cstdio> #include<cstring> #include<cmath> #include<algorithm ...

  4. LVS+Keepalived实现高可用集群

    LVS+Keepalived实现高可用集群来源: ChinaUnix博客 日期: 2009.07.21 14:49 (共有条评论) 我要评论 操作系统平台:CentOS5.2软件:LVS+keepal ...

  5. POJ 3286 How many 0's?

    题目链接 题意 :写下m到n之间所有的数,会写多少个0. 思路 :先算0到m的,再算0到n的,最后相减. 网上有位大神是这么推的,看下面.... 首先转化成求 [0, x] 中所有数中,含有的 0 的 ...

  6. 通过Calendar 类获取前一个月的第一天

      SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); //获取到当前的时间     Cale ...

  7. jquery控制按钮的禁用与启用

    jquery禁用a标签方法1: $(document).ready(function () { $("a").each(function () { var textValue = ...

  8. Oracle中关于数据库实例名与数据库服务名(转载)

    今天同事,出现了数据库连接失败的问题,一起百度了一下,结果总算解决了,以下是一些转载过来的普及知识. 1.查询数据库名:select name,dbid from v$database;或者命令行:s ...

  9. LeeCode 1-Two Sum

    Two Sum Total Accepted: 125096 Total Submissions: 705262 Question Solution Given an array of integer ...

  10. 10 harsh truths that will help you grow

    10 harsh truths that will help you grow帮你成长的10个残酷事实In the game of life, if it often seems like you’r ...