码迷,mamicode.com
首页 > 其他好文 > 详细

Minimum Size Subarray Sum

时间:2016-08-30 07:05:37      阅读:134      评论:0      收藏: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 -1 instead.

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.

Challenge 

If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n).

 

Analyse: Two pointers. O(n)

Runtime: 203ms

 1 class Solution {
 2 public:
 3     /**
 4      * @param nums: a vector of integers
 5      * @param s: an integer
 6      * @return: an integer representing the minimum size of subarray
 7      */
 8     int minimumSize(vector<int> &nums, int s) {
 9         // write your code here
10         // mark left, set right as left + 1
11         // move right until sum of nums[left...right] >= s
12         // update the min length and let left move one position
13         // if current sum >= s update min length and keep move left
14         // if current sum < s move right one position
15         
16         if (nums.empty()) return -1;
17         int left = 0, right = 1;
18         int minSize = INT_MAX, tempSum = nums[left];
19         if (tempSum > s) return 1;
20         while (left < nums.size() && right < nums.size()) {
21             tempSum += nums[right];
22             while (tempSum >= s) {
23                 minSize = min(minSize, right - left + 1);
24                 tempSum -= nums[left];
25                 left++;
26             }
27             if (tempSum < s) {
28                 right++;
29             }
30         }
31         return minSize == INT_MAX ? -1 : minSize;
32     }
33 };

 

Analyse: Brute force. O(n^2)

Runtime: 605ms

技术分享
 1 class Solution {
 2 public:
 3     /**
 4      * @param nums: a vector of integers
 5      * @param s: an integer
 6      * @return: an integer representing the minimum size of subarray
 7      */
 8     int minimumSize(vector<int> &nums, int s) {
 9         // write your code here
10         if (nums.empty()) return -1;
11         
12         int result = INT_MAX;
13         for (int i = 0; i < nums.size(); i++) {
14             int tempSum = nums[i];
15             if (tempSum >= s) return 1;
16             for (int j = i + 1; j < nums.size(); j++) {
17                 tempSum += nums[j];
18                 if (tempSum >= s) {
19                     result = min(result, j - i + 1);
20                     break;
21                 }
22             }
23         }
24         return result == INT_MAX ? -1 : result;
25     }
26 };
View Code

 

Minimum Size Subarray Sum

标签:

原文地址:http://www.cnblogs.com/amazingzoe/p/5820400.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!