1. 程式人生 > 其它 >LeetCode第136題只出現一次的數字

LeetCode第136題只出現一次的數字

技術標籤:位運算演算法

題目要求
給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
關鍵點:某個元素只出現一次,其餘每個元素均出現兩次
使用知識點:異或運算
異或運算特點

  1. a ^ a ^ b ^ c ^ c = b; a ^ b ^ a ^ c ^ c = b
  2. a ^ a = 0; a ^ b = c

題目要求的是除了某個元素只出現一次以外,其餘的都出現了兩次,剛好用異或可以把其餘出現兩次的都個消除掉
第一種方式使用位運算

class Solution {
	public int singleNumber(int[] nums) {
		int
sum = 0; for(int i = 0;i < nums.length;i++){ sum ^= num[i]; } return sum; } }

第二種方式使用HashMap

import java.util.*;
class Solution {
	public int singleNumber(int[] nums) {
		HashMap<Integer,Integer> map = new HashMap<>();
		for(Integer i:nums){//i做key值
			Integer count = map.get(
i);//獲取i的value值 count = count==null?1:++count;//如果為null則就賦值count為1count用於記錄次數,不為null則就++count map.put(i,count);//新增元素 } for(Integer i: nums){ if(map.get(i) == 1){ return i; } } return 0; } }