代码拉取完成,页面将自动刷新
package com.fishercoder.solutions;
/**
* 683. K Empty Slots
*
* 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: 1
Output: 2
Explanation: In the second day, the first and the third flower have become blooming.
Example 2:
Input:
flowers: [1,2,3]
k: 1
Output: -1
Note:
The given array will be in the range [1, 20000].
*/
public class _683 {
public static class Solution1 {
/**credit: https://discuss.leetcode.com/topic/104771/java-c-simple-o-n-solution*/
public int kEmptySlots(int[] flowers, int k) {
int[] days = new int[flowers.length];
for (int i = 0; i < flowers.length; i++) {
days[flowers[i] - 1] = i + 1;
}
int left = 0;
int right = k + 1;
int result = Integer.MAX_VALUE;
for (int i = 0; right < flowers.length; i++) {
if (days[i] < days[left] || days[i] <= days[right]) {
if (i == right) {
result = Math.min(result, Math.max(days[left], days[right]));
}
left = i;
right = k + 1 + i;
}
}
return result == Integer.MAX_VALUE ? -1 : result;
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。