力控算法每日一练:209. 长度最小的子数组(java)

作者 : admin 本文共558个字,预计阅读时间需要2分钟 发布时间: 2024-06-11 共1人阅读

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 

子数组

 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

力控算法每日一练:209. 长度最小的子数组(java)插图

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
     int left=0;
     int sum=0;
     int result=Integer.MAX_VALUE;
     for( int right=0;right=target){
            result=Math.min(result,right-left+1);
            sum-=nums[left++];
        }
     }
     return result == Integer.MAX_VALUE ? 0:result;
    }
}

java的代码如上,我的理解就是:弄个右指针和左指针,和一个result弄最大,然后用右指针遍历数组,当sum求和达到target时,就把right-left+1得到的长度返回,跟result比,小的的留下,如果sum一直大于target,那么就增加left缩短长度,看能不能大于等于target,如果不行则退出while循环,继续累加right指针,以此类推,最后得到最短长度的。谢谢观看!

本站无任何商业行为
个人在线分享 » 力控算法每日一练:209. 长度最小的子数组(java)
E-->