leetcode -- Single Number 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 implement it without using extra memory?

[解题思路]

人生最悲催的事是刚面完试,leetcode就把我面试的题目给刷出来了。。。。

1.O(n) time complexity O(n) space complexity count the ocurrence of every number

 1 public class Solution {
 2     public int singleNumber(int[] A) {
 3         // Note: The Solution object is instantiated only once and is reused by each test case.
 4         int N = A.length;
 5         if(N == 0){
 6             return N;
 7         }
 8         
 9         Map<Integer, Integer> counts = new HashMap<Integer, Integer>();
10         for(int i = 0; i < N; i++){
11             if(counts.containsKey(A[i])){
12                 counts.put(A[i], counts.get(A[i]) + 1);
13             } else {
14                 counts.put(A[i], 1);
15             }
16         }
17         
18         Iterator<Map.Entry<Integer, Integer>> iterator = counts.entrySet().iterator();
19         while(iterator.hasNext()){
20             Map.Entry<Integer, Integer> entry = iterator.next();
21             if(entry.getValue() != 3){
22                 return entry.getKey();
23             }
24         }
25         return 0;
26     }
27 }

 

 2.使用O(1)的空间来解决

 1 public int singleNumber(int[] A) {
 2         // Note: The Solution object is instantiated only once and is reused by each test case.
 3         int N = A.length;
 4         if(N == 0){
 5             return N;
 6         }
 7         
 8         int[] counts = new int[32];
 9         int result = 0;
10         for(int i = 0; i < 32; i++){
11             for(int j = 0; j < N; j++){
12                 if(((A[j] >> i) & 1) == 1){
13                     counts[i] = (counts[i] + 1) % 3;
14                 }
15             }
16             result |= (counts[i] << i);
17         }
18         
19         return result;
20     }

ref:http://www.mitbbs.com/article_t/JobHunting/32547143.html

posted @ 2013-10-04 12:00  feiling  阅读(3276)  评论(0编辑  收藏  举报