首页 > 其他 > 详细

leetcode136. 只出现一次的数字

时间:2019-11-10 16:02:21      阅读:76      评论:0      收藏:0      [点我收藏+]

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

说明:

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

示例 1:

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

示例 2:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答:

解法1.使用map或者set来遍历保存一下数据,在遍历一遍容器将出现次数为1的数据返回就可以了。但是不满足题目要求的常数级内存要求。

技术分享图片
 1 class Solution {
 2     public int singleNumber(int[] nums) {
 3         if(nums==null||nums.length==0)
 4             return 0;
 5         HashMap<Integer,Integer> map=new HashMap<>();
 6         for(int i=0;i<nums.length;i++)
 7             if(map.containsKey(nums[i]))
 8                 map.put(nums[i],map.get(nums[i])+1);
 9             else
10                 map.put(nums[i],1);
11         for(int i=0;i<nums.length;i++)
12             if(map.get(nums[i])==1)
13                 return nums[i];
14         return -1;
15     }
16 }
View Code

解法2:

这道题精妙在此,说实话看到解答的时候我会有很大的挫败感。太菜了,还要加油啊。

使用异或的解法,对于1^1=0,1^0=1,对于相同的数异或得到的结果是0,所以这题的两个相同数都变成了0,只剩下一个单独的数。

技术分享图片
1 class Solution {
2     public int singleNumber(int[] nums) {
3         int res=nums[0];
4         for(int i=1;i<nums.length;i++)
5             res^=nums[i];
6         return res;
7     }
8 }
View Code

 

leetcode136. 只出现一次的数字

原文:https://www.cnblogs.com/cold-windy/p/11830462.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!