Single Number I

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?

直接异或解决。

class Solution {
public:
int singleNumber(int A[], int n) {
int res=;
for(int i=;i<n;i++)
{
res=res^A[i];
}
return res;
}
};

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?

分析1

由于int型由32bit表示,因此可以用一个长度为32的int数组保存各个比特位上1出现的次数。最后,将数组各元素对3取余,那么32位数组就纪录了只出现了一次的整数的二进制表示。

public class SingleNumberII {
private final static int INTEGER_DIGITS = ; public int singleNumber(int[] A) {
if (A == null || A.length <= ) {
return ;
} int ret = ;
int[] count = new int[INTEGER_DIGITS];
for (int i = ; i < INTEGER_DIGITS; ++i) {
for (int j = ; j < A.length; ++j) {
count[i] += (A[j] >> i) & 0x0001;
}
ret |= (count[i] % ) << i;
}
return ret;
}
}

分析2

我们也没必要开 int bit[32]的数组去统计的

我们来模拟二进制加法

用两位来计数,到3就把该位清零。

bit2  bit1

bit1 如果该位来的是1 ,保持0,1,0,1。。。(也就是xor,异或),如果是0就不变

当bit1=1的时候再来一个1,那么bit2=1

当这两个bit同时为1,说明这是3啦(二进制你想想嘛),该位清零。

class Solution {
public:
int singleNumber(int A[], int n) {
int ones = , twos = , threes = ;
for(int i = ; i < n; i++)
{
threes = twos & A[i]; //已经出现两次并且再次出现
twos = twos | ones & A[i]; //曾经出现两次的或者曾经出现一次但是再次出现的
ones = ones | A[i]; //出现一次的 twos = twos & ~threes; //当某一位出现三次后,我们就从出现两次中消除该位
ones = ones & ~threes; //当某一位出现三次后,我们就从出现一次中消除该位
}
return ones; //twos, threes最终都为0.ones是只出现一次的数
}
};

分析3:

其实就是设置三个标志位,出现一次标志位1对应的bit变为1,出现两次标志位2对应的bit变为1,出现三次标志位三对应的bit变为1.

理解了这种思路,代码也就不难写了。

class Solution {
public:
int singleNumber(vector<int>& nums) {
int one=;
int two=;
int three=;
for(int i=;i<nums.size();i++)
{
two|=one&nums[i];
one^=nums[i];
three=one&two;
one&=~three;
two&=~three;
}
return one|two;
}
};

Single Number I&& II——还没看,倒过头来再看的更多相关文章

  1. 4.Single Number && Single Number (II)

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

  2. 【LeetCode】Single Number I & II & III

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

  3. LeetCode Single Number I II Python

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

  4. LeetCode Single Number I / II / III

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

  5. Leetcode 137. Single Number I/II/III

    Given an array of integers, every element appears twice except for one. Find that single one. 本题利用XO ...

  6. LeetCode: Single Number I && II

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

  7. single number i && ii && iii

    Problem statement Elementary knowledge: There is a popular question when I seeked my job at Beijing: ...

  8. LeetCode 【Single Number I II III】

    Given an array of integers, every element appears twice except for one. Find that single one. 思路: 最经 ...

  9. 【深入理解JAVA虚拟机】第4部分.程序编译与代码优化.1.编译期优化。这章编译和实战部分没理解通,以后再看。

    1.概述 1.1.编译器的分类 前端编译器:Sun的Javac. Eclipse JDT中的增量式编译器(ECJ)[1].  把*.java文件转变成*.class文件 JIT编译器:HotSpot ...

随机推荐

  1. 基础dp例题整理

    背包: 消失之物 先直接做一遍,必然对于i,有 for(j=m;j>=w[i];--j) f[i]+=f[i-w[i]] 所以,如果排除用i做背包的结果,减去这个转移就好了. memcpy(g, ...

  2. caffe中使用crop_size剪裁训练图片

    layer { name: "data" type: "Data" top: "data" top: "label" i ...

  3. Codeforces Round #532 (Div. 2):F. Ivan and Burgers(贪心+异或基)

    F. Ivan and Burgers 题目链接:https://codeforces.com/contest/1100/problem/F 题意: 给出n个数,然后有多个询问,每次回答询问所给出的区 ...

  4. HDU多校(Distinct Values)

    Problem Description Chiaki has an array of n positive integers. You are told some facts about the ar ...

  5. JS 中类型鉴别

    JS中的基本类型有:数字(Number(NaN,Infinity)),字符串(String),Undefined,Null,Boolean 引用类型有:数组(Array),对象(Object),函数( ...

  6. bzoj [POI2007]旅游景点atr 状态压缩+Dij

    [POI2007]旅游景点atr Time Limit: 30 Sec  Memory Limit: 357 MBSubmit: 2258  Solved: 595[Submit][Status][D ...

  7. Python to list users in AWS

    code import boto3 c1=boto3.client('iam') #list_users will be a dict users=c1.list_users() #transfer ...

  8. 快速搭建rabbitmq单节点并配置使用

    安装erlang环境 wget http://erlang.org/download/otp_src_20.3.tar.gz tar xf otp_src_20.3.tar.gz && ...

  9. How GitLab uses Unicorn and unicorn-worker-killer

    GitLab uses Unicorn, a pre-forking Ruby web server, to handle web requests (web browsers and Git HTT ...

  10. modelsim10 SE 仿真lattice Xp2工程

    1.首先要建立Lattice XP2库 在modelsim10 SE启动后.首先指定Lattice Diamond 1.4 给定的仿真器库源代码编译目录: C:\lscc\diamond\1.4\ca ...