求最小空余可用id

package demo;

public class P43 {
//乱序整型数组,元素为在用的id(从1开始),求最小空余可用id
//思路1:创建(length+1)数组,下标对应id,id<=length且用过则值设为1
//思路2:用分区法,不断二分。如果下标+1==id,说明左区和mid都用过,再从右区找;否则说明左区有空余,再从左区找。
	public static void main(String[] args) {
		int[] arr= {4,2,3,5,6,1};
		System.out.println(smallestId(arr));
	}
	
	static int smallestId(int[] arr) {
		int[] helper=new int[arr.length+1];
		for(int i=0;i<arr.length;i++) {
			if(arr[i]<=arr.length) {
				helper[arr[i]]=1;
			}
		}
		for(int i=1;i<=arr.length;i++) {
			if(helper[i]==0) {
				return i;
			}
		}
		return arr.length+1;
	}

}
posted @ 2022-05-02 19:50  fighterk  阅读(27)  评论(0)    收藏  举报