LeetCode 136. 只出现一次的数字(Single Number)

题目描述

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4

解题思路

由于相同的两个数异或运算结果一定为0,所以讲数组中的数依次异或,最后所有出现两次的数异或结果为0,只剩下出现一次的数,即异或结果。

代码

1 class Solution {
2 public:
3     int singleNumber(vector<int>& nums) {
4         int res = 0;
5         for(int i = 0; i < nums.size(); i++)
6             res ^= nums[i];
7         return res;
8     }
9 };

原文地址:https://www.cnblogs.com/wmx24/p/9504925.html

时间: 2024-08-30 10:35:29

LeetCode 136. 只出现一次的数字(Single Number)的相关文章

Leetcode 260.只出现一次的数字III

只出现一次的数字III 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 : 输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案. 你的算法应该具有线性时间复杂度.你能否仅使用常数空间复杂度来实现? 分析 1. 数组中所有数字做异或运算,因为有两个元素只出现一次,所以最后的异或运算结果sum 为两个单独元素x,y的异或结果.因为相同数字异或运算结

【OJ】【Leetcode】【数学】136. 只出现一次的数字

题目 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1]输出: 1示例 2: 输入: [4,1,2,1,2]输出: 4 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/single-number著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 官方题解   (方法

136. 只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 class Solution { public int singleNumber(int[] nums) { int sum = nums[0]; for(int i=1;i<nums.length;i++) { su

leadcode的Hot100系列--136. 只出现一次的数字

因为之前刚写了461号题目,这个题目与那个很相似, 461号题目用异或来算两个不一样的部分, 那这个题目需要排除一样的部分,并找到不一样的部分. 那么可以再利用一下异或的特性: 1.相同为0,所以,a ^ a = 0. 2.不同为0,所以,0 ^ b = b. 所以,假设数组里面的数分别就是 a,a,b, ---> a ^ a ^ b = b,那么b就是要找的那个不一样的数字. (异或的最终结果与异或的顺序无关,即 a ^ b ^ c = a ^ c ^ b = b ^ c ^ a ). 附上代

[LeetCode] 137. 只出现一次的数字 II

题目链接 : https://leetcode-cn.com/problems/single-number-ii/ 题目描述: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例: 示例 1: 输入: [2,2,3,2] 输出: 3 示例 2: 输入: [0,1,0,1,0,1,99] 输出: 99 思路: 占坑, 这道题要重点研究一下! 代码: 原文地址:htt

136. 只出现一次的数字(异或/哈希表)

哈希表,暴力. 1 class Solution { 2 public int singleNumber(int[] nums) { 3 Set<Integer> map=new HashSet<>(); 4 for(int num:nums){ 5 if(map.contains(num)){ 6 map.remove(num); 7 } 8 else { 9 map.add(num); 10 } 11 } 12 return map.iterator().next(); 13

LeetCode 136 Single Number(只出现一次的数字)

翻译 给定一个整型数组,除了某个元素外其余元素均出现两次.找出这个只出现一次的元素. 备注: 你的算法应该是一个线性时间复杂度.你可以不用额外空间来实现它吗? 原文 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 i

LeetCode 137 Single Number II(只出现一次的数字 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 im

LeetCode 136、137、260(只出现一次的数,异或性质及应用)

First. 陈列一下“异或”的一些性质 异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1. 它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0. 性质 1.交换律 2.结合律(即(a^b)^c == a^(b^c)) 3.对于任何数x,都有x^x=0,x^0=x 4.自反性 A ^ B ^ B = A ^  0 = A  应用 一.交换两个整数的值而不必用第三个参数 a = 9; b =