lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.题目

 

 

 

https://leetcode.cn/problems/single-number/

 

 考察点

  • 位运算,即对二进制数进行的运算,比如与、或、非、异或等。
  • 异或运算,即按位比较两个数,如果不同则为1,相同则为0。异或运算的符号是^。
  • 异或运算的性质和应用,比如:任何数和0异或,结果还是原来的数;任何数和自己异或,结果是0;异或运算满足交换律和结合律;异或运算可以用来找出数组中只出现一次的数字。
  •  这道题也可以用哈希表或排序的方法来解决,但是会增加空间复杂度或时间复杂度。

2.解法

 

这道题的解题思路是使用异或运算,

因为异或运算满足交换律和结合律,且任何数和0异或等于自身,任何数和自身异或等于0。

 

这道题的目标是找到一个数组中只出现一次的数字,其他数字都出现两次。一个简单的方法是使用异或运算符,因为异或运算符有以下性质:

 

  • 任何数和0异或,结果仍然是原来的数,即a^0=a。
  • 任何数和自身异或,结果是0,即a^a=0。
  • 异或运算满足交换律和结合律,即abc=a(bc)=(ab)c。

 

所以,我们可以遍历数组中的所有数字,用一个变量result来保存异或的结果。初始时,result为0。每次遍历一个数字num,就将result和num

 

class Solution {
    public int singleNumber(int[] nums) {
        // 初始化result为0
        int result = 0;
        // 遍历数组中的所有数字
        for (int num : nums) {
            // 将result和num异或,更新result的值
            result ^= num;
        }
        // 返回result
        return result;
    }
}

  

 

3.总结

posted on 2023-04-10 19:14  白露~  阅读(19)  评论(0编辑  收藏  举报