1. 程式人生 > >leetcode解題之136 #Single Number Java版(只出現一次的數字)

leetcode解題之136 #Single Number Java版(只出現一次的數字)

136. Single Number

Given an array of integers, every element appearstwice except for one. Find that single one.

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

只出現一次的數字,其他全部兩次,能不使用額外的空間嗎?

使用map:

public  int singleNumber(int[] nums) {
		int i = 0;
		int j = nums.length - 1;
		Map<Integer, Integer> map = new HashMap<>();
		while (i <= j) {
			if (map.containsKey(nums[i]))
				map.put(nums[i], map.get(nums[i])+1);
			else
				map.put(nums[i], 1);
			i++;
			
		}
		i = 0;
		while (i <= j) {
			if (map.get(nums[i]) == 1)
				break;
			i++;
		}
		return nums[i];
	}

使用異或運算:

如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。

0與任何數做異或都是 那個數,相同的數字做異或等於0;

    1. a ^ b = b ^ a

    2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;

public  int singleNumber(int[] nums) {

		int result = nums[0];

		for (int i = 1; i < nums.length; i++) {
			result = result ^ nums[i];
		}
		
		return result;
	}