美文网首页工作生活
数组 / 只出现一次的数字

数组 / 只出现一次的数字

作者: 原创迷恋者 | 来源:发表于2019-07-03 09:50 被阅读0次

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

我最初想用Set来解题,但发现这样做并不容易。因此,转换下思路。先对数组进行排序,此时相同的数会出现在一起。因此,数nums[i]如果与nums[i-1]和nums[i+1]都不相等的话(1<i<n-1),说明它就是那个数。首尾只需要比较相邻的一个数即可。

 public int singleNumber(int[] nums) {
        int length = nums.length;
        Arrays.sort(nums);
        // 特殊情况处理
        if(length==1)
            return nums[0];
        // 特殊边界
        if (nums[0] != nums[1])
            return nums[0];
        else if (nums[length - 2] != nums[length - 1])
            return nums[length - 1];

        for (int i = 1; i < length - 2; i++) {
            if (nums[i] != nums[i - 1] && nums[i] != nums[i + 1])
                return nums[i];
        }
        return 0;
    }

这道题的思路和Q122:买卖股票的最佳时机有些相似。都是比较相邻两数,是一个从局部观全局的point。

相关文章

网友评论

    本文标题:数组 / 只出现一次的数字

    本文链接:https://www.haomeiwen.com/subject/iaufhctx.html