136.只出現一次的數字
阿新 • • 發佈:2022-03-22
題目
給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1]
輸出: 1
示例 2:
輸入: [4,1,2,1,2]
輸出: 4
解題思路
- 不用額外空間,考慮位運算
- 異或:
class Solution { public: int singleNumber(vector<int>& nums) { int ret = 0; for (auto e: nums) ret ^= e; return ret; } };
- 記錄一個很好的思路:
public static int SingleNumber(int[] nums) { HashSet<int> set = new HashSet<int>(); for (int i = 0; i < nums.Length; i++) { //該判斷語句的整體作用是:如果當前數字(nums[i])已經在之前出現過,那麼在雜湊集例項(set)中移除當前數字 // Add 方法的作用是添加當前數字於雜湊集中,如果當前數字和該集合(set)元素存在重複,則返回 False 。故在此採用了邏輯非操作符(!) if (!set.Add(nums[i])) set.Remove(nums[i]); ; } //因為每個重複元素最多存在兩個,而重複元素的第一個新增後均被移除,而第二個均未新增成功,故此時雜湊集只保留唯一且未重複的元素 // First*1 方法的作用是返回該序列的第一個元素 return set.First(); } //https://leetcode-cn.com/problems/single-number/solution/cou-yi-pian-ti-jie-hua-shuo-ti-jie-hen-hao-wan-by-/