力扣刷题——136. 只出现一次的数字

136. 只出现一次的数字

位运算

这题让我想起做过的另一道题https://www.luogu.com.cn/problem/solution/P1161

利用性质:

一个数与0异或得到还是这个数它本身,且一个数与某个数异或两次或偶数次得到仍是它本身。进一步可以知道0与任何数异或奇数次时得到该数,异或偶数次时仍为0;

而且经过验证还有如下性质

比如有a, x, y, z. a=0; x, y, z != 0.

a与x, y, z中任意两个数异或偶数次,剩下一个数异或奇数次,则最后a等于剩下那个数,且异或顺序不一定,比如a^x, a^y, a^ x, a^y, a ^ z. 此时a=z。

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

posted on 2023-02-23 15:42  pumpkinsBig  阅读(15)  评论(0)    收藏  举报

导航