一,问题描述
1,给定一个数组,包含n个不同的数字,从0,1,2,3,…,n中,找到数组中缺少的那个数。
2,例如 [0,1,3] 输出2
输入: [0, 1 ,2 ,4] 输出3
输入:[1, 0] 输出 2
3,解题思路
这题要注意,就是数组可能是无序的,所以首先排序一下。然后从左到右开始扫描,如果碰到数组的元素不等于该元素的下表,直接把该元素等于数组长度+1。
然后再对数组扫描一遍,如果遇到该数组的元素不等于该元素的下表,直接return 该下表; 否则返回数组的长度。
二,AC了的程序 (用Java实现的)
import java.util.*;
public class Test2{
public int missingNumber(int []nums)
{
int len=nums.length;
Arrays.sort(nums);
for(int i=0;i<len;)
{
int data=nums[i];
if(nums[i]>=len) //那说明数组的最后一个元素等len
{
i++;
continue; //直接跳到for进行下一轮开始计算
}
if(data!=i) //如果当前的元素不等于元素的下表
{
/* int temp=nums[i]; //两个元素进行交换一下
nums[i]=nums[data];
nums[data]=temp;
*/
nums[i]=len+1;
}
else
{
i++;
}
}
for(int i=0;i<len;i++)
{
if(nums[i]!=i) //这里遇到该元素与元素的下表不相等的话,直接输出来。
{
return i;
}
}
return len;
}
public static void main(String []args)
{
Test2 test=new Test2();
Scanner scan=new Scanner(System.in);
int k=scan.nextInt();
int []data=new int[k];
for(int i=0;i<k;i++)
{
data[i]=scan.nextInt();
}
int result=test.missingNumber(data);
System.out.println("结果: "+result);
}
}
运行结果: