我是靠谱客的博主 强健寒风,最近开发中收集的这篇文章主要介绍给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

输入: [2,2,1]
输出: 1
class Solution {
    public int singleNumber(int[] nums) {
 int ans = 0;
        for(int num: nums) {
            ans ^= num;
        }
        return ans;
    }


}

 

解题思路
● 题目中说明其余元素都出现 2 次,只有某一个元素只出现了1次
● 由于异或在位运算时相同为0,不同为1,因此所有出现偶数次的整数都会相互抵消变成0,只有唯一出现奇数次的整数会被留下
● n ^ n === 0 且 n ^ 0 === n
● 异或运算遵循交换律

● 举例来说:[4,1,2,1,2] 将数字全部异或运算一遍
● 4 ^ 1 ^ 2 ^ 1 ^ 2 => 1 ^ 1 ^ 2 ^ 2 ^ 4 => 0 ^ 2 ^ 2 ^ 4 => 2 ^ 2 ^ 4 => 0 ^ 4 => 4
● 最终结论:出现 2 次的数字在异或中都抵消了,最后得出只出现 1 次的数

 

最后

以上就是强健寒风为你收集整理的给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?的全部内容,希望文章能够帮你解决给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部