1 Star 0 Fork 0

徐长贺/Leetcode

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
_683.java 1.99 KB
一键复制 编辑 原始数据 按行查看 历史
stevesun 提交于 8年前 . [N-0] refactor 683
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;
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/isulong/Leetcode.git
git@gitee.com:isulong/Leetcode.git
isulong
Leetcode
Leetcode
master

搜索帮助