683. K Empty Slots

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zjucor/article/details/78075570

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:

  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;
    }
}


Slots of Fun

02-16

DescriptionnnThe International Betting Machine company has just issued a new type of slot machine. The machine display consists of a set of identical circles placed in a triangular shape. An example with four rows is shown below. When the player pulls the lever, the machine places a random letter in the center of each circle. The machine pays off whenever any set of identical letters form the vertices of an equilateral triangle. In the example below, the letters 'a' and 'c' satisfy this condition. nnnIn order to prevent too many payoffs, the electronics in the machine ensures that no more than 3 of any letter will appear in any display configuration. nIBM is manufacturing several models of this machine, with varying number of rows in the display, and they are having trouble writing code to identify winning configurations. Your job is to write that code. nInputnnInput will consist of multiple problem instances. Each instance will start with an integer n indicating the number of rows in the display. The next line will contain n(n + 1)/2 letters of the alphabet (all lowercase) which are to be stored in the display row-wise, starting from the top. For example, the display above would be specified as n4 nabccddadca nThe value of n will be between 1 and 12, inclusive. A line with a single 0 will terminate input. nOutputnnFor each problem instance, output all letters which form equilateral triangles on a single line, in alphabetical order. If no such letters exist, output "LOOOOOOOOSER!". nSample Inputnn4nabccddadcan6nazdefccrhijrrmznzocpqn2nabcn0nSample OutputnnacncrznLOOOOOOOOSER!

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭