136. Single Number

136. Single Number

一、題目

Given a non-empty array of integers nums, every element appears twice except for one. Find that single one.

You must implement a solution with a linear runtime complexity and use only constant extra space.

 

Example 1:

Input: nums = [2,2,1] Output: 1

Example 2:

Input: nums = [4,1,2,1,2] Output: 4

Example 3:

Input: nums = [1] Output: 1

 

Constraints:

  • 1 <= nums.length <= 3 * 104
  • -3 * 104 <= nums[i] <= 3 * 104
  • Each element in the array appears twice except for one element which appears only once.

 

二、程式作法

 /*解法二 XOR*/
public class Solution
{
    public int SingleNumber(int[] nums)
    {
        int res = 0;
        foreach (var item in nums)
            res ^= item;

        return res;
    }
}

/*解法一 sort*/
/*
public class Solution
{
    public int SingleNumber(int[] nums)
    {
        List<int> list = new List<int>();

        for (int i = 0; i < nums.Length; i++)
            list.Add(nums[i]);
        list.Sort();

        for (int i = 0; i < list.Count - 1; i += 2)
        {
            if (list[i] != list[i + 1])
                return list[i];
        }
        return list[list.Count - 1];
    }
}
*/

 

三、思路筆記

一陣列中,找出唯一只出現一次的元素值。

解法一,

先對陣列作排列,然後從頭開始每兩個兩個歷遍比較,

如果發現兩者不一樣時,則其中一個元素只出現一次。

解法二,

利用 XOR 的特性,兩者相同為0,不同為1,

所以將陣列裡所有的元素都 XOR 一遍之後,

最後留下來的值就是元素只出現一次的那個值。