java 具有k个元素的最小子数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 具有k个元素的最小子数组相关的知识,希望对你有一定的参考价值。

import java.util.*;
public class MinSubArray {
    class Pair{
        int start;
        int end;
        Pair(int start, int end) {
            this.start = start;
            this.end = end;
        }
        int length(){
            return end - start;
        }
        public String toString(){
            return "[" + start + "," + end + "]";
        }
    }
    public static void main(String args[]) {
        MinSubArray minSubArray = new MinSubArray();
        int[][] input = {
          null,
          {},
          {1},
          {0,1,11,3,1,3,4},
          {10,4,2,5,6,3,8,1}
        };
        
        for(int i=0; i< input.length; i++) {
            for(int k=0;k< 10;k++){
                System.out.println("Input: " + Arrays.toString(input[i]) + ", k=" + k +" Result: " + minSubArray.find(input[i], k));
            }
        }
    }
    public Pair find(int[] input, int k) {
        if(input == null || input.length < 1 || k == 0){
            return null;
        }
        
        if(k > input.length) {
            return new Pair(0, input.length-1);
        }
        
        int currentSum = 0;
        int minSoFar = Integer.MAX_VALUE;
        Pair result = new Pair(-1,-1);

        for(int i=0; i<input.length; i++) {
            currentSum += input[i];
            if(i+1 >= k) {
                if(minSoFar > currentSum) {
                    minSoFar = currentSum;
                    result.start = i+1-k;
                    result.end = i;
                }
                currentSum = currentSum - input[i+1-k];
            }
        }
        
        return result;
    }
}

以上是关于java 具有k个元素的最小子数组的主要内容,如果未能解决你的问题,请参考以下文章

5893. 含特定字母的最小子序列(单调栈)

LeetCode 1403.非递增顺序的最小子序列

406. 和大于S的最小子数组

将数组拆分为包含唯一对象组合的最小子数组

区间DP POJ1160村庄邮局问题

每日一题1403. 非递增顺序的最小子序列