136.Single Number---异或、位运算
题目大意:给出一串数组,里面的数都是两个,只有一个数是一个,把这个只有一个的数找出来。时间复杂度最好是线性的,空间复杂度最好为O(1).
法一:利用map,空间换时间,代码如下(耗时26ms):
public int singleNumber(int[] nums) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
int res = -1;
for(int i = 0; i < nums.length; i++) {
if(map.get(nums[i]) != null && map.get(nums[i]) == 1) {
map.put(nums[i], 2);
}
else {
map.put(nums[i], 1);
}
}
for(int i = 0; i < nums.length; i++) {
if(map.get(nums[i]) == 1) {
res = nums[i];
break;
}
}
return res;
}
法二:先排序,再一个for循环,依次比较,代码如下(耗时8ms):
public int singleNumber(int[] nums) {
Arrays.sort(nums);
int res = nums[0];
int cnt = 1;
boolean flag = false;
for(int i = 1; i < nums.length; i++) {
if(nums[i] != nums[i - 1]) {
if(cnt == 1) {
res = nums[i - 1];
flag = true;
break;
}
cnt = 1;
}
else {
cnt++;
}
}
if(flag == false) {
res = nums[nums.length - 1];
}
return res;
}
法三(借鉴):利用异或,由3^3=0知道,相同的两个数异或为0,不同的两个数异或为1。代码如下(耗时1ms):
public int singleNumber(int[] nums) {
int res = nums[0];
for(int i = 1; i < nums.length; i++) {
res = res ^ nums[i];
}
return res;
}
法四(借鉴):利用137题的法三,位运算,只是把对3取模改成对2取模即可。(num>>i)&1取num的第i位二进制数。ans |= sum <<i将二进制相加转为十进制。代码如下(耗时12ms):
public int singleNumber(int[] nums) {
int ans = 0;
int length = nums.length;
//将每一个数取二进制位按位相加,如果都是重复的则当前位的相加和一定是3的倍数,否则当前位一定存在于要找的那个数中
//比如1,1,1,2,2,2,3这六个数将其转为二进制数按位相加,然后每一位都对3取模,最后一定可以得到3
for(int i = 0; i < 32; i++) {//计算每一位
int sum = 0;//统计每一位的和
for(int j = 0; j < length; j++) {//对每个数取第i位的数值
if(((nums[j] >> i) & 1) == 1) {//取第i位的数值
sum++;//将每个数第i位的值相加求和
sum %= 2;
}
}
if(sum != 0) {//如果对3取模后非0,则说明当前位一定是要找的数的某一位
ans |= sum << i;//将其转为十进制加入结果当中
}
}
return ans;
}
136.Single Number---异或、位运算的更多相关文章
- leetcode 136 Single Number, 260 Single Number III
leetcode 136. Single Number Given an array of integers, every element appears twice except for one. ...
- leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)
136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...
- LeetCode 136. Single Number C++ 结题报告
136. Single Number -- Easy 解答 相同的数,XOR 等于 0,所以,将所有的数字 XOR 就可以得到只出现一次的数 class Solution { public: int ...
- LeetCode 136. Single Number(只出现一次的数字)
LeetCode 136. Single Number(只出现一次的数字)
- 136. Single Number - LeetCode
Question 136. Single Number Solution 思路:构造一个map,遍历数组记录每个数出现的次数,再遍历map,取出出现次数为1的num public int single ...
- LeetCode - 136. Single Number - ( C++ ) - 解题报告 - 位运算思路 xor
1.题目大意 Given an array of integers, every element appears twice except for one. Find that single one. ...
- 【LeetCode】136. Single Number 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 异或 字典 日期 [LeetCode] 题目地址:h ...
- Leetcode 136 Single Number 仅出现一次的数字
原题地址https://leetcode.com/problems/single-number/ 题目描述Given an array of integers, every element appea ...
- 【LeetCode】136. Single Number (4 solutions)
Single Number Given an array of integers, every element appears twice except for one. Find that sing ...
随机推荐
- hadoop和spark搭建记录
因玩票需要,使用三台搭建spark(192.168.1.10,192.168.1.11,192.168.1.12),又因spark构建在hadoop之上,那么就需要先搭建hadoop.历经一个两个下午 ...
- P2766 最长不下降子序列问题
题目描述 «问题描述: 给定正整数序列x1,...,xn . (1)计算其最长不下降子序列的长度s. (2)计算从给定的序列中最多可取出多少个长度为s的不下降子序列. (3)如果允许在取出的序列中多次 ...
- 创建Django工程-Day19
1. 新建一个day19的工程和app01. 2. 新建templates和static的文件夹. 3. 去settings.py中去做配置. 1)注释掉csrf 2)配置模板路径 'DIRS': [ ...
- 【转】WinForms 使用Graphics绘制字体阴影
转自:http://www.cnblogs.com/LonelyShadow/p/3893743.html C#以两种方法实现文字阴影效果,同时还实现了简单的动画效果: 一种是对文本使用去锯齿的边缘处 ...
- [BJWC2011]元素 线性基
题面 题面 题解 一个方案合法,当且仅当选取的01串凑不出0. 因此就是要使得选取的01串全在线性基内,具体原因可以看这道题:[CQOI2013]新Nim游戏 线性基 要使得魔力值最大,只需要按法力值 ...
- mac os 启动服务命令 launchctl
参考苹果开发者网址 https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Ch ...
- Windows10实用技巧-固定快捷方式到磁贴菜单方式
快捷方式固定到磁贴 Win10的开始菜单中的磁贴功能比较不错,可以在不清理桌面上其他软件的情况下直接唤醒需要的应用. 但是比较麻烦的是一些应用或快捷方式并不能直接固定到上面. 后来发现所有Windo ...
- Covariance 协方差分析
sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...
- SDK代码记录
zynq中SDK相关API的学习.记录常用函数 /*************************************************************************** ...
- Codechef Observing the Tree
Home » Practice(Hard) » Observing the Tree https://www.codechef.com/problems/QUERY Observing the T ...