码迷,mamicode.com
首页 > 其他好文 > 详细

136.Single Number

时间:2017-10-19 10:22:23      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:esc   ber   amp   代码   pen   isp   blog   tps   lan   

题目链接:https://leetcode.com/problems/single-number/description/

题目大意:给出一串数组,里面的数都是两个,只有一个数是一个,把这个只有一个的数找出来。时间复杂度最好是线性的,空间复杂度最好为O(1).

法一:利用map,空间换时间,代码如下(耗时26ms):

技术分享
 1     public int singleNumber(int[] nums) {
 2         Map<Integer, Integer> map = new HashMap<Integer, Integer>();
 3         int res = -1;
 4         for(int i = 0; i < nums.length; i++) {
 5             if(map.get(nums[i]) != null && map.get(nums[i]) == 1) {
 6                 map.put(nums[i], 2);
 7             }
 8             else {
 9                 map.put(nums[i], 1);
10             }
11         }
12         for(int i = 0; i < nums.length; i++) {
13             if(map.get(nums[i]) == 1) {
14                 res = nums[i];
15                 break;
16             }
17         }
18         return res;
19     }
View Code

法二:先排序,再一个for循环,依次比较,代码如下(耗时8ms):

技术分享
 1     public int singleNumber(int[] nums) {
 2         Arrays.sort(nums);
 3         int res = nums[0];
 4         int cnt = 1;
 5         boolean flag = false;
 6         for(int i = 1; i < nums.length; i++) {
 7             if(nums[i] != nums[i - 1]) {
 8                 if(cnt == 1) {
 9                     res = nums[i - 1];
10                     flag = true;
11                     break;
12                 }
13                 cnt = 1;
14             }
15             else {
16                 cnt++;
17             }
18         }
19         if(flag == false) {
20             res = nums[nums.length - 1];
21         }
22         return res;
23     }
View Code

法三(借鉴):利用异或,由3^3=0知道,相同的两个数异或为0,不同的两个数异或为1,代码如下(耗时1ms):

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

 

136.Single Number

标签:esc   ber   amp   代码   pen   isp   blog   tps   lan   

原文地址:http://www.cnblogs.com/cing/p/7690806.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!