Lesson 2 Arrays Question 1 OddOccurrencesInArray

源地址

https://app.codility.com/programmers/lessons/2-arrays/odd_occurrences_in_array/

OddOccurrencesInArray

給定一個非空數組 A,包含有 N 個整數,起始下標爲 0。數組包含有奇數個元素,其中除了唯一一個元素之外,其他每個元素都可以與數組中另一個有相同值的元素配對。

比如,在下面這個數組中:

 A[0] = 9  
 A[1] = 3  
 A[2] = 9
 A[3] = 3  
 A[4] = 9  
 A[5] = 7
 A[6] = 9 

下標爲 0 和 2 的元素的值是 9
下標爲 1 和 3 的元素的值是 3
下標爲 4 和 6 的元素的值是 9
下標爲 5 的元素的值是 7,無法配對
寫一個函數:

  class Solution { 
  	public int solution(int[] A); 
  }

對滿足上述條件的數組 A,返回數組中無法配對的元素的值。

比如,給定以下數組:

 A[0] = 9  
 A[1] = 3  
 A[2] = 9
 A[3] = 3  
 A[4] = 9  
 A[5] = 7
 A[6] = 9 

函數應該返回 7,如上述解釋。

假定:

N 取值範圍 [1…1,000,000]內的奇數;
數組 A 每個元素是取值範圍 [1…1,000,000,000] 內的 整數 ;
A中除了一個元素以外其他的元素都出現奇數次。

第一步

用HashSet來保存結果,如果出現兩次就把值從set中刪除,最後剩下的就是落單的數。

public int solution(int[] A) {
        Set<Integer> set = new HashSet<Integer>();
        for (int a : A) {
            if (set.contains(a)) {
                set.remove(a);
            } else {
                set.add(a);
            }
        }
        return set.iterator().next();
    }

第二步

把數組中所有的數字全部和0異或在一起,偶數次出現的數異或爲0,最後剩下的就是落單的數。

    public int solution(int[] A) {
        int result = 0;
        for (int a : A) {
            result ^= a;
        }
        return result;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章