Leetcode題解之陣列(5) 只出現一次的數字
阿新 • • 發佈:2018-12-18
題目描述:
給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:
你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 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];
}
}