leetcode136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
1.自己想到的解法是先通过Arrays.sort对数组排序,至少nlogn时间复杂度,
再遍历有序数组,当nums[i]==nums[i+1]时,i+=2这样。增加了多余的时间复杂度
2.最好的方法是通过^(异或运算符),因为题目只要数相同都是2个,那么这题目偶数个一定是返回0,为奇数时题意才有解。
通过设置single=0;不断执行single = single^nums[i].最后留下来的就是单独的那个数。
原理就是利用二进制在^(异或条件下)
当single=0; 二进制为00000000
nums[i] = 4,二进制为00000100,异或的结果为4,
拿4去异或下一个值nums[i+1] = 2
nums[i+1]=2,二进制为00000010结果为6,为什么呢?在异或条件下,相同为0,不同为1.
eg: 4 – 二进制–00000100
2 – 二进制–00000010
异或----------------------------------------
等于6 --二进制—00000110
所以当为奇数个时,第一次^新值是相当于做加法,当第二次 ^相同的值时,这次是做减法(你们可以自己写二进制)
附上最好的解法:
class Solution {
public int singleNumber(int[] nums) {
int single = 0;
for(int i = 0;i < nums.length; i++){
single = single ^ nums[i];
}
return single;
}
}
- leetcode解题之136 #Single Number Java版(只出现一次的数字)
- 【136.只出现一次的数字】 LeetCode
- Leetcode刷题24-136.只出现一次的数字(C++)
- Leetcode136-只出现一次的数字
- LeetCode 136 Single Number 出现一次的数字
- LeetCode 136 Single Number(仅仅出现一次的数字)
- [leetcode] Python(3)--存在重复元素(217)、只出现一次的数字(136)
- leetcode - 136 - 只出现一次的数字
- leetcode 136. 只出现一次的数字
- leetcode之136 只出现一次的数字
- Java&LeetCode 初入门——136. 只出现一次的数字
- 【LeetCode-面试算法经典-Java实现】【136-Single Number(只出现一次的数字)】
- LeetCode - 136. 只出现一次的数字
- Leetcode 136 Single Number 仅出现一次的数字
- LeetCode 136. 只出现一次的数字
- 从零开始刷LeetCode:[136] 只出现一次的数字
- Leetcode:136. 只出现一次的数字
- Leetcode 136 只出现一次的数字
- leetcode136 只出现一次的数字
- LeetCode 136.只出现一次的数字(python)