题目
假设有一个数组,里面是正整数,找出里面缺少的最小的数字。例如,1、2、4、5、7,他里面缺少 3 和 6,把 3 找出来即可。
第一种解法
先排序,然后一个一个的找出来断开的数字,再比较大小。
第二种解法
使用 bitmap ,降所有的数据放到里面,然后,取出那些为 0 的在什么位置,进行一个还原即可
代码如下所示:
import java.util.BitSet;
/*
* 假设有一个数组,里面是正整数,找出里面缺少的最小的数字。例如,1、2、4、5、7,他里面缺少 3 和 6,把 3 找出来即可,从 index = 1 开始检查,如果遇到 false 的情况,则可以确定此为上就是最小的那个数字。这个的时间复杂度为 O(n) ,只和数组的大小相关。
* */
public class Solution {
public static int solution(int[] arr){
int rs = 0 ;
BitSet set = new BitSet();
for (int i : arr) {
set.set(i);
}
int l = set.length();
for (int i = 1; i < l; i++) {
if(!set.get(i)){
System.out.println(i);
rs = i ;
break;
}
}
return rs ;
}
public static void main(String[] args) {
// int[] array = new int[]{1,2,4,5,7};
int[] array1 = new int[]{1,2,3,4,5,6,9};
solution(array1);
}
}