【LeetCode】136. 只出現一次的數字(single-number)的解題思路

題目如下:(題目鏈接戳我

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

說明:

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

示例 1:

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

示例 2:

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

以下是我的解題思路:

思路一:
把所有出現的數據全部都放到一個 set 集合中,放之前判斷一下,如果 set 集合中有,就移除這個數據,因爲出現兩次的數據會經歷放入集合和移動集合,所以最後 set 集合中只剩下一個數據,就是我們需要的數據;

思路二:
這個思路是在我看了官方解題思路後整理的,先遍歷數組,把數組都放入 set 集合,只增加,不移除,並順便得出數組中所有數值的和 sum1;然後遍佈這個 set 集合,求出所有數值的和 sum2,再乘以 2, 這個時候,sum2 * 2 就比 sum1 多一個數,讓它們倆相減,得到的差就是我們所要的數據;

代碼如下:

class Solution {
	//方法一
    public int singleNumber(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int num: nums){
            if(set.contains(num)){
                set.remove(num);
            }else{
                set.add(num);
            }
        }
		Iterator<Integer> iterator = set.iterator();
            return iterator.next();
        }
        return -1;
    }
	//方法二
	public int singleNumber2(int[] nums) {
        Set<Integer> set = new HashSet<>();
        int sum1 = 0, sum2 = 0;
        for (int num: nums){
            set.add(num);
            sum1 += num;
        }
        for (int num : set) {
            sum2 += num;
        }
        return sum2 * 2 - sum1;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章