683. K Empty Slots

来源:互联网 发布:手机qq2010 java版 编辑:程序博客网 时间:2024/06/07 14:57

There is a garden with N slots. In each slot, there is a flower. The N flowers will bloom one by one in N days. In each day, there will be exactly one flower blooming and it will be in the status of blooming since then.

Given an array flowers consists of number from 1 to N. Each number in the array represents the place where the flower will open in that day.

For example, flowers[i] = x means that the unique flower that blooms at day i will be at position x, where i and x will be in the range from 1 to N.

Also given an integer k, you need to output in which day there exists two flowers in the status of blooming, and also the number of flowers between them is k and these flowers are not blooming.

If there isn't such day, output -1.

Example 1:

Input: flowers: [1,3,2]k: 1Output: 2Explanation: In the second day, the first and the third flower have become blooming.

Example 2:

Input: flowers: [1,2,3]k: 1Output: -1

Note:

  1. The given array will be in the range [1, 20000].
思路:分成若干个大小为k的bin box,之前好像LC有道类似的题目
import java.util.Arrays;class Solution {    public int kEmptySlots(int[] a, int k) {    int box = k+1, n = a.length/box+1;//    if(a.length%box!=0)n++;    int[] left = new int[n], right = new int[n];    Arrays.fill(left, -1);    Arrays.fill(right, -1);        for(int i=0; i<a.length; i++) {    int idx = a[i] / box;        if(left[idx] == -1)left[idx]=a[i];    else left[idx] = Math.min(left[idx], a[i]);        if(right[idx] == -1)right[idx]=a[i];    else right[idx] = Math.max(right[idx], a[i]);        if(idx > 0) {    if(left[idx] - right[idx-1] == k+1)    return i+1;    }        if(idx < n-1) {    if(left[idx+1] - right[idx] == k+1)    return i+1;    }    }            return -1;    }}


原创粉丝点击