Minimum Size Subarray Sum
Posted amazingzoe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 -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
View Code
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 };
以上是关于Minimum Size Subarray Sum的主要内容,如果未能解决你的问题,请参考以下文章
#Leetcode# 209. Minimum Size Subarray Sum