关闭

LeetCode-209:Minimum Size Subarray Sum

149人阅读 评论(0) 收藏 举报
分类:

原题描述如下:

Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If there isn't one, return 0 instead.

For example, given the array [2,3,1,2,4,3] and s = 7,
the subarray [4,3] has the minimal length under the problem constraint.

题意给定一个整数数组和一个指定的数s,找出该数组中所有子数组求和大于s的数组中,长度最短的子数组

解题思路:

            设定两个指针i,j, 初始时分别指向数组的第一个位置0,然后设定一个临时变量sum,表示i与j之间的数字求和(包括i,不包括j),设定一个表示最小长度的值min,初始值等于无穷大,当sum小于s的时候,j++,一旦sum大于等于s,j停止++,这个时候让i++,若sum还大于等于s,且j-i > min,更新min=j-i,直到sum小于s,再次让j++,直到j到达数组尾端为止。

Java代码:

public class MinimumSizeSubarraySum {
    public static void main(String[] args) {
        MinimumSizeSubarraySum ms = new MinimumSizeSubarraySum();
        int[] nums = {2,3,1,2,4,3};
        int s = 7;
        int res = ms.minSubArrayLen(s, nums);
        System.out.println(res);
    }
    
    public int minSubArrayLen(int s, int[] nums) {
        
        int sum = 0;
        
        int i = 0;
        int j = 0;
        
        int min = Integer.MAX_VALUE;
        
        while(j <= nums.length && i <= j){
            if(sum >= s){
                if(j - i < min){
                    min = j-i;
                }
                
                sum -= nums[i];
                i ++;
            }else{
                if(j < nums.length){
                    sum += nums[j];
                }
                j ++;
            }
        }
        return min == Integer.MAX_VALUE ? 0 : min;
    }
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:25414次
    • 积分:1414
    • 等级:
    • 排名:千里之外
    • 原创:119篇
    • 转载:20篇
    • 译文:0篇
    • 评论:0条
    文章分类