LeetCode-136. 只出现一次的数字

132 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

1.题目描述

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4

Tips: 力扣地址:leetcode-cn.com/problems/si…

2. 思路分析

这个题目的解题关键在于其余的元素均出现两次,只有一个出现一次。这个让我们想到了在学习编程的时候对于^(异或运算)有这样的特点:

  • 任何数字异或自己都等于0,也就是例如a=10,那么a^a=0
  • 0异或任何数字都等于该数字,也就是0^a=a
  • 异或运算满足交换律和结合律,也就是a^b^c=(a^c)^b

那么根据异或运算的特点,以及题目题干给出来的除了某个元素只出现一次以外,其余每个元素均出现两次。只需要遍历数组,进行异或运算就能找到只出现一次的值

3. AC代码

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

提交代码检验正确性:

image.png

完全正确

4. 总结

整个题目的关键就是的元素均出现两次,只有一个出现一次,然后对异或运算的特点的巧妙运用就能轻松解决问题。(这些小的技巧平时在业务代码中也是可以用到的)

我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢