挑战做100道力扣算法- DAY1

136. 只出现一次的数字 - 力扣(LeetCode)

hot100里的简单题

我们先来复习一遍与或非:

  • 与(AND) :符号 && 或 &,两个操作数都为真时结果为真
  • 或(OR) :符号 || 或 |,至少一个操作数为真时结果为真
  • 非(NOT) :符号 !,真变假,假变真
  • 异或(XOR) :符号 ^,两个操作数不同时为真,相同时为假

异或运算有几个重要性质:

  1. 任何数与 0 异或等于它本身:a ^ 0 = a
  2. 任何数与自身异或等于 0:a ^ a = 0
  3. 异或运算满足交换律和结合律:a ^ b = b ^ a,(a ^ b) ^ c = a ^ (b ^ c)

参考代码:

java 复制代码
class Solution {
    public int singleNumber(int[] nums) {
        int n = nums.length;
        int ret = 0;
        for(int i = 0; i <= n - 1; i++){
            ret = ret ^ nums[i];
        }
        return ret;
    }
}

这段代码利用了异或运算的性质来找出数组中只出现一次的数字:

  1. 初始化 ret = 0
  2. 遍历数组,对每个元素执行异或操作
  3. 由于异或运算满足交换律和结合律,所有出现两次的数字都会相互抵消为 0
  4. 最终剩下的就是只出现一次的数字

例如数组 [4, 1, 2, 1, 2]:

  • 0 ^ 4 = 4
  • 4 ^ 1 = 5
  • 5 ^ 2 = 7
  • 7 ^ 1 = 6
  • 6 ^ 2 = 4 ← 最终结果

时间复杂度 O(n),空间复杂度 O(1)。

相关推荐
海绵宝宝转agent3 小时前
Leetcode100 二叉树的中序遍历
java·算法
根目录下的猫3 小时前
ROS 2 C++(rclcpp)版本,实现话题订阅、话题发布,以及完整编译运行流程
开发语言·c++·算法
大侠归来5 小时前
C 语言 | 在函数中操作数组
c语言·c++·算法
怕浪猫10 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github
朝朝辞暮i11 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
Evand J12 小时前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa
weixin_3077791313 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
朝朝辞暮i13 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
朝朝辞暮i14 小时前
C++ 第 29 课:回调函数 Callback
开发语言·c++·算法
ychqsq14 小时前
207.炸酱面
经验分享·职场和发展