Leetcode之Missing Number问题

来源:互联网 发布:知茵女装是品牌吗 编辑:程序博客网 时间:2024/05/29 18:28

问题描述:

Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the onethat is missing from the array.

Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?

示例:
Given nums = [0, 1, 3] return 2

问题来源:Missing Number (详细地址:https://leetcode.com/problems/missing-number/description/)

思路:1)首先,得先明确题目的要求,题目要求的是必须在线性时间内找到答案并且无需额外的空间复杂度;

           2)找到丢失的那个数字,言外之意就是其他的数字都在;

           3)思路其实还是比较明确的,但是可以有很多种解法:

          a)第一种解法: 0~n的数求和就是s = n*(n + 1)/2,然后把目前为止数组中元素的和sum求出来,然后缺少的那个数不就是原来不缺数时的和(即s)减去当前的所有元素之和(即sum),不就ok了吗?

          b)第二种解法:咱们不是需要遍历所有的元素的吗?那就不需要额外再进行求和了,直接利用index - nums[index]求和,最后加上最后的索引nums.length,不就是n + 1个数的和了吗?然后减去元素之和就是结果啦。其实和上面的解答是一个意思。

          c)第三种解法:在这,我们采用的是异或的方式,因为a ^ b ^ b = a,咱们就利用这个性质,一个数异或上两个相同的数得到的是还是原来的数,利用xor记录最后的异或结果,即xor = xor ^ i ^ nums[i],最后xor的结果就是没法异或掉的数以及它对应的索引,最后问题所需的结果就是xor ^ i,这个就是题目要求的那个数了。

代码:


         



原创粉丝点击