Leetcode--136. 只出现一次的数字
发布日期:2021-04-30 21:03:06 浏览次数:132 分类:精选文章

本文共 818 字,大约阅读时间需要 2 分钟。

要解决这个问题,我们需要找到一个只在整数数组中出现一次的元素,其余元素都出现了两次。我们可以利用位运算中的异或操作来高效地解决这个问题,时间复杂度为O(n),并且不需要额外的空间。

方法思路

我们可以通过以下步骤来解决这个问题:

  • 初始化一个变量:创建一个变量x初始化为0。
  • 遍历数组:从数组的第一个元素开始,逐个将当前元素与x进行异或操作。
  • 计算异或结果:由于数组中大部分数字出现两次,异或操作的结果会相互抵消,只留下那个只出现一次的数字。
  • 解释

    • 异或操作的性质:异或操作满足交换律和结合律。一个数异或它自己等于0,任何数异或0等于它本身。
    • 数组中的元素出现次数:数组中大部分数字出现两次,异或两次的结果为0。只有那个只出现一次的数字会被异或一次,结果不变。
    • 最终结果:遍历完数组后,变量x将等于那个只出现一次的数字。

    代码实现

    public class Solution136 {    public static int singleNumber(int[] nums) {        int x = 0;        for (int num : nums) {            x ^= num;        }        return x;    }    public static void main(String[] args) {        int[] nums = {4, 1, 2, 1, 2};        System.out.println(singleNumber(nums));    }}

    代码解释

    • 初始化变量x初始化为0。
    • 遍历数组:使用for循环遍历数组中的每个元素num
    • 异或操作:将x与当前元素num进行异或操作。
    • 返回结果:遍历完数组后,x的值即为只出现一次的数字。

    通过这种方法,我们可以在O(n)的时间复杂度内高效地找到只出现一次的元素,并且不需要额外的空间。

    上一篇:该如何高效实用Kotlin?看这一篇就够了!
    下一篇:厚积薄发打卡Day46: [itcast] GoF23通俗易懂的设计模式之 <迭代器模式>

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2026年05月29日 10时26分47秒