剑指 Offer 53 - II. 0~n-1中缺失的数字

113 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情

剑指 Offer 53 - II. 0~n-1中缺失的数字

一、题目描述:

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

示例 1:

输入: [0,1,3]

输出: 2

示例 2:

输入: [0,1,2,3,4,5,6,7,9]

输出: 8

限制:

1 <= 数组长度 <= 10000

来源:力扣(LeetCode) 链接:leetcode.cn/problems/qu… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

这部分可以写写:

  1. 这道题考察了什么思想?你的思路是什么?

    这道题目我的思路很简单,就是0-n-1中抽n-1个数,我们只需要对n-1个数进行排序,然后看哪个数是第一个下标与值不相等的数,这个下标就是我们要获取的值。不过,如果一直遍历到底都相等,并不代表没有缺失,这时候我们考虑值为n-1的数缺失。

  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

image-20220624091925942

class Solution {
    public int missingNumber(int[] nums) {
        Set<Integer> set = new HashSet<Integer>();
        for (int num : nums) {
            set.add(num);
        }
        int n = nums.length + 1;
        for (int i = 0; i < n - 1; i++) {
            if (!set.contains(i)) {
                return i;
            }
        }
        return n - 1;
    }
}

作者:stormsunshine
链接:https://leetcode.cn/problems/que-shi-de-shu-zi-lcof/solution/by-stormsunshine-f5m2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

接下来大佬的解法令我叹为观止,我真的不可能想到这种解法!太强了!

image-20220624092040360

 class Solution {
     public int missingNumber(int[] nums) {
         int xor = 0;
         for (int num : nums) {
             xor ^= num;
         }
         int n = nums.length + 1;
         for (int i = 0; i < n; i++) {
             xor ^= i;
         }
         return xor;
     }
 }
 ​
 作者:stormsunshine
 链接:https://leetcode.cn/problems/que-shi-de-shu-zi-lcof/solution/by-stormsunshine-f5m2/
 来源:力扣(LeetCode)
 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

三、AC 代码:

 class Solution:
     def missingNumber(self, nums: List[int]) -> int:
         nums.sort()
         for i, num in enumerate(nums):
             if num != i:
                 return i
         return len(nums)

四、总结:

如果你还有更多的思考、分析、总结,通通都加上来吧~

剑指 Offer 53 - II. 0~n-1中缺失的数字

简简单单的一道题目,大佬给出了五种解法,而我只能想到最简单的那种,看来简单的题目也有很多高效的解法,我们还是得多做题,多见识啊!

这里是小伞,一个努力刷题的程序员,希望你能够喜欢。

写作模板来源:

作者:掘金酱 链接:juejin.cn/post/706970…

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。