首页 > 试题广场 >

长度最小的连续子数组

[编程题]长度最小的连续子数组
  • 热度指数:3458 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个数组 nums 和一个正整数 target , 找出满足和大于等于 target 的长度最短的连续子数组并返回其长度,如果不存在这种子数组则返回 0。

数据范围:数组长度满足 ,数组中的元素满足
示例1

输入

[1,2,4,4,1,1,1],9

输出

3
示例2

输入

[1,4,4,4,1,1,1],3

输出

1
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @param target int整型 
     * @return int整型
     */
    public int minSubarray (int[] nums, int target) {
        // write code here
        if(nums.length==0){
            return -1;
        }
        ArrayList<Integer> maxArr=new ArrayList<>();
        for(int i=0;i<nums.length;i++){
            int sum=0;
            int size=0;
            for(int j=i;j<nums.length;j++){
                if(sum<target){
                    sum+=nums[j];
                    size++;
                }
                if(sum>=target){
                    maxArr.add(size);
                    break;
                }
            }
        }
        int length=Collections.min(maxArr);
        return length;
    }
}

发表于 2023-05-20 09:17:09 回复(0)
// 考虑用滑动窗口处理很快!
public int minSubarray (int[] nums, int target) {
    int left = 0, right = 0, sum = 0, min = nums.length;
    while (right < nums.length) {
        int in = nums[right];
        right++;
        sum += in;
        while (sum >= target) {
            min = Math.min(min, right - left);
            int out = nums[left];
            left++;
            sum -= out;
        }
    }
    return min == nums.length ? 0 : min;
}
发表于 2021-12-11 11:46:10 回复(0)

问题信息

难度:
2条回答 1879浏览

热门推荐

通过挑战的用户

查看代码