我是靠谱客的博主 自觉大炮,最近开发中收集的这篇文章主要介绍找出数组中只出现一次的数字,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目

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

示例 1:

输入: [2,2,1]
输出: 1
示例 2:

输入: [4,1,2,1,2]
输出: 4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number

解法一:

如果对数组进行排序,那么相同的数字必定在相邻的位置。遍历数组找到与相邻数字不相等的数字即是只出现一次的数字。
如果遍历结束都没有找到,说明数组的最后一位是只出现一次的数字,返回即可。

class Solution {
    public int singleNumber(int[] nums) {
        Arrays.sort(nums);
        for(int i=0;i<nums.length-1;i+=2){
            if(nums[i]!=nums[i+1]){
                return nums[i];
            }
        }
        return nums[nums.length-1];
    }
}

解法二(官方解法,牛!):

使用异或位运算。
运用异或位运算的性质:
1.一个数和0异或等于本身
2.自己和自己异或等于0
3.异或运算遵循结合律和交换律
运用上边的三条性质,假设数组中有a1,a2,…,am出现两次,am+1出现一次,则使用结合律和交换律,数组中所有数进行异或的结果等价于
(a1 异或 a1)异或 (a2 异或 a2)异或… (am 异或 am) 异或 am+1=0 异或 0 异或 0 … 异或 am+1=am+1

更详细请参考官方文档。
https://leetcode-cn.com/problems/single-number/solution/zhi-chu-xian-yi-ci-de-shu-zi-by-leetcode-solution/
所以数组中所有元素异或的结果就是只出现一次的结果的值。

class Solution {
    public int singleNumber(int[] nums) {
        int single=0;
        for(int i=0;i<nums.length;i++){
            single^=nums[i];
        }
        return single;
    }
}

最后

以上就是自觉大炮为你收集整理的找出数组中只出现一次的数字的全部内容,希望文章能够帮你解决找出数组中只出现一次的数字所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部