Leetcode 209 Minimum Size Subarray Sum
来源:互联网 发布:网络棋牌赌博平台举报 编辑:程序博客网 时间:2024/05/22 14:36
原题地址
https://leetcode.com/problems/minimum-size-subarray-sum/
题目描述
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.
给出一个正整数数组,以及一个正整数s,找到最短的子数组且该子数组的和不小于s。如果不存在这样的子数组,返回0.
For example, given the array [2,3,1,2,4,3]
and s = 7
,
例如,给出数组[2,3,1,2,4,3]
,s=7
,
the subarray [4,3] has the minimal length under the problem constraint.
在上面给出的约束条件下,子数组[4,3]
具有最短的长度。
解题思路
这个问题比较简单,使用两个指针,其中一个指针fast向后移动,寻求满足sum>s的位置,另一个指针向前移动,试图在sum>s的条件下缩小子数组的长度的,并且更新最短长度len。
代码
/** * 返回局部和大于等于s的最小子数组长度 * @param s 给定的局部和 * @param nums 数据数组 * @param numsSize 数据个数 * @return 满足条件的子数组的最小长度 如果不存在满足条件的子数组返回0 */int minSubArrayLen(int s, int* nums, int numsSize) { if (numsSize <= 0) return 0; int len = numsSize + 1, slow = 0, fast = 1, sum = *nums; // 初始化 while (fast < numsSize) { while (fast < numsSize && sum < s) // 和小于s时fast往前移动 sum += *(nums + fast++); while (slow < fast && sum >= s) // 和大于等于s时,slow往前移动,试图缩小子数组 sum -= *(nums + slow++); // slow往前移动,并更新子数组局部和 if (len > fast - slow + 1) // 试图缩小满足条件的子数组长度 len = fast - slow + 1; } // 如果len没有变化说明没有这样的子数组,返回0 return len == numsSize + 1 ? 0 : len; }
完整代码 https://github.com/Orange1991/leetcode/blob/master/209/c/main.c
测试数据
[2,3,1,2,4,3], s=7 : len=2[5,1,3,5,10,7,4,9,2,15], s=15 : len=1[5,1,3,5,10,7,4,9,2,8], s=15 : len=2[5,1,3,5,10,7,4,9,2,15], s=100 : len=0
2015/8/14
0 0
- [Leetcode 209, Medium] Minimum Size Subarray Sum
- LeetCode 209 - Minimum Size Subarray Sum
- leetcode 209 : Minimum Size Subarray Sum
- Leetcode NO.209 Minimum Size Subarray Sum
- leetcode-209 Minimum Size Subarray Sum
- Minimum Size Subarray Sum - LeetCode 209
- Leetcode #209 Minimum Size Subarray Sum
- Leetcode 209 Minimum Size Subarray Sum
- LeetCode(209)Minimum Size Subarray Sum
- [leetcode-209]Minimum Size Subarray Sum(java)
- leetcode 209: Minimum Size Subarray Sum
- [leetcode] 209 Minimum Size Subarray Sum
- [LeetCode 209] Minimum Size Subarray Sum
- LeetCode 209 Minimum Size Subarray Sum
- 【LeetCode-209】Minimum Size Subarray Sum
- LeetCode-209:Minimum Size Subarray Sum
- LeetCode 209: Minimum Size Subarray Sum
- LeetCode 209 Minimum Size Subarray Sum
- 【转】使用Gson将Java对象转换为Json
- iOS中assign、copy 、retain等关键字的含义
- Hibernate中的实体状态之个人体会
- Git Gui for Windows的建库、克隆(clone)、上传(push)、下载(pull)、合并
- CAT1024/CAT1025--带I2C串行2kbit CMOS EEPROM和手动复位的监控电路
- Leetcode 209 Minimum Size Subarray Sum
- [自我记录贴] IntelliJ & Android Studio Issues
- Android--修改ListView的点击效果
- Solman系列 安装SAP Solution Manager 7.1 on Suse Linux 2
- Ubuntu 14.04 LTS Server 安装 LAMP Server
- Eclipse背景颜色调整
- 关于linux shell 中的cat << EOM
- php的数据类型和变量的作用域
- linux 用户和用户组管理常用命令