LeetCode 136.只出现一次的数字题解

136.只出现一次的数字

原题描述

在这里插入图片描述

思路点拨

在解决此题前,我们先来了解一下异或运算(⊕)的两个性质:

  1. a⊕0=a ; 任何数与0异或都等于其本身
  2. a⊕a=0 ; 两个相等的数异或为0

由此我们可以推导出: x⊕a⊕a=x;

根据这个x⊕a⊕a=x性质,我们可以利用两个相同的数字异或来消除彼此,因此我们把此题所有元素异或一遍,出现两次的数全部互相消除了,最后的结果一定是只出现一次的数字

源码解析

class Solution {
    
    
public:
    int singleNumber(vector<int>& nums) {
    
    
        int ret=0;
        for(int num : nums)//遍历nums
        {
    
    
            ret=ret^num;//利用异或消除两个相等的数
        }
        return ret;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_52324409/article/details/121056931