【技巧】Leetcode 136. 只出现一次的数字【中等】

只出现一次的数字

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

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

示例1:

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

解题思路

可以使用位运算中的异或(XOR)操作。

  • 异或运算有以下性质:

  • 1、任何数和0异或,结果仍为原来的数:a ⊕ 0 = a

  • 2、任何数和自己异或,结果为0:a ⊕ a = 0

  • 3、异或运算满足交换律和结合律:a ⊕ b ⊕ a = (a ⊕ a) ⊕ b = 0 ⊕ b = b

对应这个问题

  • 可以遍历整个数组,对数组中的所有元素进行异或操作。
  • 由于数组中除了一个元素只出现一次,其余每个元素都出现两次,
  • 因此相同的元素进行异或运算后结果为 0。而任何数和 0 进行异或运算的结果仍然是原来的数。

Java实现

public class SingleNumber {
    public static int singleNumber(int[] nums) {
        int result = 0;
        for (int num : nums) {
            result ^= num;
        }
        return result;
    }

    public static void main(String[] args) {

        int[] nums = {4, 2, 2, 1, 1,4,125};
        System.out.println(singleNumber(nums));
    }
}

时间空间复杂度

  • 时间复杂度:O(n),其中 n 是数组 nums 的长度,因为我们需要遍历所有元素。

  • 空间复杂度:O(1),只使用了常量额外空间。

相关推荐

  1. 技巧Leetcode 136. 出现数字【中等】

    2024-04-04 12:34:05       38 阅读
  2. LeetCode136出现数字

    2024-04-04 12:34:05       67 阅读
  3. [Easy] leetcode-136 出现数字

    2024-04-04 12:34:05       33 阅读
  4. 136.出现数字

    2024-04-04 12:34:05       33 阅读
  5. 出现数字算法(leetcode136题)

    2024-04-04 12:34:05       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 12:34:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 12:34:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 12:34:05       82 阅读
  4. Python语言-面向对象

    2024-04-04 12:34:05       91 阅读

热门阅读

  1. 动态规划 Leetcode 392 判断子序列

    2024-04-04 12:34:05       30 阅读
  2. vue实现axios和事件Bus等父子组件的事件传递实现

    2024-04-04 12:34:05       42 阅读
  3. Vue 学习随笔系列十二 -- 表格内容渲染方法

    2024-04-04 12:34:05       42 阅读
  4. 01 使用ArcGIS生成节点路径

    2024-04-04 12:34:05       32 阅读
  5. hadoop3.0高可用分布式集群安装

    2024-04-04 12:34:05       37 阅读
  6. Python 自动备份文件到远程目录(Windows适用)

    2024-04-04 12:34:05       30 阅读
  7. Python程序设计 单例模式

    2024-04-04 12:34:05       34 阅读