【1】LeetCode 136 Single Number

题意:奇数个数,其中除了一个数只出现一次外,其他数都是成对出现,比如1,2,2,3,3...,求出该单个数。

解法:容易想到异或的性质,两个相同的数异或为0,那么把这串数从头到尾异或起来,最后的数就是要求的那个数。

代码如下:

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

【2】LeetCode 137 Single Number II

题意:给一串数,除了一个数只出现一次外,其他数都出现了三次。求那个单个数。

解法:还是从位操作上考虑,把每个数写成二进制列出来,每位对齐,可以发现,每一位上的1的个数要么是3的倍数,要么是3的倍数+1,那么把每一位的1个数加起来,模3即可的单个数的该位为0还是为1。

代码如下:

class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = ;
for(int i=;i<;i++) {
int dream = (<<i), cnt = ;
for(int j=;j<nums.size();j++)
cnt += (bool)(nums[j] & dream);
cnt = cnt % ;
ans ^= (cnt << i);
}
return ans;
}
};

【3】LeetCode 260 Single Number III

题意:有一串数字,其中有两个不同的数,各出现一次,其他的数都出现2次。找出这两个数。

解法:看到其他数出现两次,又想到异或操作,如果全部异或起来,得到的是那两个数的异或。既然是两个不同的数,那么异或的二进制里面必然是有1的,我们先找出这个1,然后逐个检查,如果这位有1,那么异或到a,否则异或到b,最后的a,b即是这两个值。找1可以找最后一个1,x&(-x)即可。

代码如下:

class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int xorsum = ;
for(int i=;i<nums.size();i++) xorsum ^= nums[i];
int lastdifferentbit = xorsum & (-xorsum);
int a = , b = ;
for(int i=;i<nums.size();i++) {
if(nums[i] & lastdifferentbit) a ^= nums[i];
else b ^= nums[i];
}
return vector<int>{a,b};
}
};

LeetCode Single Number I / II / III的更多相关文章

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

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

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

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

  3. LeetCode 【Single Number I II III】

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

  4. single number i && ii && iii

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

  5. LeetCode: Single Number I && II

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

  6. LeetCode Single Number I II Python

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

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

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

  8. [LeetCode] Single Number III 单独的数字之三

    Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...

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

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

随机推荐

  1. JS 常用验证REG

    不错的JS验证~~~~~~~~~~~~~~~~~~~~~~~~~ 用途:校验ip地址的格式 输入:strIP:ip地址 返回:如果通过验证返回true,否则返回false: */ function i ...

  2. 【linux草鞋应用编程系列】_2_ 环境变量和进程控制

    一. 环境变量     应用程序在执行的时候,可能需要获取系统的环境变量,从而执行一些相应的操作.     在linux中有两种方法获取环境变量,分述如下.   1.通过main函数的参数获取环境变量 ...

  3. python基础之面向对象高级编程

    面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个"函数"供使用(可以讲多函数中公用的变量封装到对象中) ...

  4. thinkcmf开发--关于控制器

    一.安装 安装---删除install文件--删除index.php--修改数据库信息--创建数据库 修改数据库信息:\data\conf\db.php(包括服务器地址) 二.创建mobile app ...

  5. 使用hovertree菜单作为后台导航

    hovertree是一个jquery菜单插件,官方网址:http://keleyi.com/jq/hovertree/ ,可以登录该网址体验效果. 0.1.3版本:http://keleyi.com/ ...

  6. jquery键盘事件总结

    在工作中在发现同事在写输入密码按键的相关js效果时,发现自己对于这块很是不了解,这几天特地了解了一下,进行以下总结: 一.首先要知道键盘事件的几个属性: 1.keydown():在键盘按下时触发. 2 ...

  7. [转]IPython Notebook简介1

    原文:http://hyry.dip.jp/tech/slice/slice.html/35 Python Notebook简介1 作者 : RY    标签: cython ipython-note ...

  8. AndRodi Strudio中的按钮时件

    AndRodi Studio中的按钮时件注册一定要写在onCraete中 @Override protected void onCreate(Bundle savedInstanceState) { ...

  9. IOS开发基础知识--碎片3

    十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice cur ...

  10. 了解HTML CSS布局(层叠样式表)

    CSS全称为"层叠样式表(Cascading Style Sheets)", 它主要是用于定义HTML内容在浏览器内显示的样式, 比如文字, 颜色, 视觉上的静态效果, 布局等等. ...