leetcode - minimum size subarray sum

Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous 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.

========================================================

刚看到这个题目,我想到的就是移窗户。 先找到第一个>=7 的contiguous的 subarray, 然后记录这个为当前窗户

然后以这个窗户大小为标准,从第二个elem开始找到下一个>= 7 的subarray,一旦size 大于当前的窗户, 我们就break回到外loop。 如果说在当前窗户之内找到一个小于当前大小的subarray, 那我们就break并且跟新当前的subarray

这样的话runtime 应该是比o(n^2)要小一点, 但是效率还是不是很高

 1     public int minSubArrayLen(int s, int[] nums) {
 2         //find first window;
 3         int windowSize = 0;
 4         int sum =  0;
 5         for (int i = 0; i < nums.length; i++) {
 6             sum = sum + nums[i];
 7             if (sum >= s) {
 8                 windowSize = i + 1;
 9                 break;
10             }
11         }
12         sum = 0;
13         int start = 1;
14         while (start < nums.length) {
15             int end = start;
16             while (end - start + 1 < windowSize && end < nums.length) {
17                 sum = sum + nums[end];
18                 if (sum >= s) {
19                     windowSize = end - start + 1; 
20                     break;
21                 }
22                 end++;
23             }
24             sum = 0;
25             start++;
26         }
27         return windowSize;
28     }

 

转载于:https://www.cnblogs.com/shuaih/p/7599841.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值