1. 程式人生 > >LeetCode:136, Single Number(找出單個數字)

LeetCode:136, Single Number(找出單個數字)

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

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

Example 1:

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

Example 2:

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

解題方法1:

private int getSingleNumer2(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int ele : nums) {
            if (set.contains(ele)) {
                set.remove(ele);
            } else {
                set.add(ele);
            }
        }
        return (int)set.toArray()[0];
    }

利用set集合進行處理;

時間複雜度:O(n);

空間複雜度:  O(n);

解題方法2:

 private int getSingleNumer4(int[] nums) {
        int singleNumber = nums[0];
        for (int i=1;i<nums.length;i++) {
             singleNumber ^=nums[i];
        }
        return singleNumber;
    }

利用異或進行處理;

時間複雜度:O(n);

空間複雜度:O(1);