挑战做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)。

相关推荐
蓝悦无人机2 小时前
《Planning algorithms》读书笔记——第1章 引言
算法·读书笔记·规划算法·lavalle
Sagittarius_A*2 小时前
分组密码基础(二):Feistel 结构与 DES 的设计思想
算法·信息安全·密码学·des·数论
青山木2 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
alexwang2113 小时前
HDU 4348 详细题解
c++·算法·题解·hdu·主席树·可持久化数据结构·可持久化线段树
可编程芯片开发3 小时前
基于分段变步长搜索RMDCFT算法的天基雷达空间机动目标检测方法MATLAB仿真,对比RMDCFT算法
算法
2501_946736164 小时前
在线考试平台如何选型?从功能、优势与应用场景角度详解
大数据·人工智能·算法
天辛大师4 小时前
天心大师:不确定中锚定自我,AI生活的哲学命题
人工智能·算法·决策树·机器学习·生活·启发式算法
皓月斯语4 小时前
B2132 素数对
c++·算法·题解
星轨初途5 小时前
LeetCode 热题 100——day2 字母异位词分组
c++·算法·leetcode