Missing Number

来源:互联网 发布:制作视频的软件 编辑:程序博客网 时间:2024/06/05 17:28

题目描述

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

For example,
Given nums = [0, 1, 3] return 2.

思路

注意这里并没有说给你的数组一定是有序的,只告诉你每一个数是不同的,而且只miss one;很容易想到的是sort一下,然后进行后一个元素减去前一个元素是否为1判断,这里注意对特殊情况,比如数组只有一个元素的时候,和[1,2,3]这种miss 0的情况。

另一种机智的思路是,数组的下标是0,1,2,3...nums.length-1,是固定的,数值也应是0,1,2,3,...nums.length-1,但是由于miss one 导致少了一个数他们变成了0,1,2...n,n-2...nums.length,可以发现除了少的那一个和因此多出来的nums.length其他都是成对出现的,所以只要把这些成对出现的数字消去,剩下的就是少的那个数和nums.length,再把nums.length去掉即可。

根据这种思路可以采取异或的方式,把所有的下标和数值异或,再和nums.length异或得到的就是那个miss one

int res = 0;int i = 0;for (; i < nums.length; i++) {    res = res ^ i ^ nums[i];  }return res ^ i;


原创粉丝点击