博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode----209. Minimum Size Subarray Sum
阅读量:4113 次
发布时间:2019-05-25

本文共 1002 字,大约阅读时间需要 3 分钟。

链接:

大意:

给定一个正整数数组nums以及一个正整数s,要求从nums找出最短的连续区间,使得区间内数字的和大于等于s,返回区间中元素的个数。规定:若找不到这样的区间,则返回0.例子:

思路:

记录两个指针变量start和curIdx,start表示当前所找区间的左端点,curIdx为遍历到的数组当前位置。以及另外一个变量subSum,记录区间[start, curIdx)的和。

当有subSum + nums[idx] >= s时,我们应该再满足subSum + nums[idx] >= s的前提下,尽可能增大start(缩小区间的长度)

最后就是更新区间的最短长度啦。。

代码:

class Solution {    public int minSubArrayLen(int s, int[] nums) {        // curIdx为当前遍历到的位置  start为满足区间的最小左位置 subSum为nums在[start,curIdx)的和        int min = Integer.MAX_VALUE, curIdx = 0, start = 0, subSum = 0;        while (curIdx < nums.length) {            // 如果找到一个curIdx使得[start,curIdx)的和满足大于等于s 那么需要尽可能地增大start(缩小区间),同时满足subSum + nums[curIdx] >= s            if (subSum + nums[curIdx] >= s) {                while (subSum + nums[curIdx] >= s) {                    subSum -= nums[start++];                }                min = Math.min(min, curIdx - (start - 1) + 1);            }            subSum += nums[curIdx++];        }        return min == Integer.MAX_VALUE ? 0 : min;    }}

结果:

结论:

思维思路很重要。 

 

 

转载地址:http://caesi.baihongyu.com/

你可能感兴趣的文章
Valid Palindrome 简单的回文判断
查看>>
Pascal's Triangle -- 生成杨辉三角
查看>>
Pascal's Triangle II 生成杨辉三角中的某行
查看>>
Minimum Depth of Binary Tree -- 二叉树的最小深度 DFS 加剪枝
查看>>
Climbing Stairs 爬楼梯方法 动态规划
查看>>
Merge Two Sorted Lists 合并两个有序链表
查看>>
pow(x,n) 为什么错这么多次
查看>>
Jump Game 动态规划
查看>>
Binary Tree Maximum Path Sum 自底向上求解(重重重重)
查看>>
Subsets 深搜
查看>>
Subsets II
查看>>
Edit Distance 字符串距离(重重)
查看>>
Gray Code 格雷码
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
web.py 0.3 新手指南 - 如何用Gmail发送邮件
查看>>
web.py 0.3 新手指南 - RESTful doctesting using app.request
查看>>
web.py 0.3 新手指南 - 使用db.query进行高级数据库查询
查看>>
web.py 0.3 新手指南 - 多数据库使用
查看>>
一步步开发 Spring MVC 应用
查看>>
python: extend (扩展) 与 append (追加) 的差别
查看>>