1. 程式人生 > >Leetcode題解之陣列(5) 只出現一次的數字

Leetcode題解之陣列(5) 只出現一次的數字

題目描述:

給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

說明:

你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?

示例 1:

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

示例 2:

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

解題思路:由於只存在一個單個的元素,結合之前的重複陣列的解題方法。我選擇先排序後比較。將陣列排序後一定會出現的情況是:

這三種情況。要麼單個的在開頭,要麼在結尾,要麼在中間。所以,可以用迴圈來比較前後兩個元素,而且因為已經排序過了,可以兩個兩個比較,提高效率。因為如果是第一種,那麼會直接找到單個元素。第二種,前面的元素會完全按兩個兩個一起排序,第三種在中間的,開頭就是兩個一組,一旦對比出有一組不等,則必定是這組中的第一個。(排序後,相等的元素會靠在一起)。

程式碼:

class Solution {
    public int singleNumber(int[] nums) {
        Arrays.sort(nums);
        for(int i=0;i<nums.length-1;i++){
            if(nums[i]!=nums[i+1]) 
               return nums[i];
            i++;
        }
        return nums[nums.length-1];   
    }
}