[LintCode] Minimum Size Subarray Sum 最小子数组和的大小
生活随笔
收集整理的這篇文章主要介紹了
[LintCode] 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.
Have you met this question in a real interview? ExampleGiven the array [2,3,1,2,4,3] and s = 7, the subarray [4,3] has the minimal length under the problem constraint.
ChallengeIf you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n).
?
LeetCode上的原題,請參見我之前的博客Minimum Size Subarray Sum。
?
解法一:
class Solution { public:/*** @param nums: a vector of integers* @param s: an integer* @return: an integer representing the minimum size of subarray*/int minimumSize(vector<int> &nums, int s) {int res = INT_MAX, sum = 0, left = 0;for (int i = 0; i < nums.size(); ++i) {sum += nums[i];if (sum >= s) {while (left < i && sum >= s) {res = min(res, i - left + 1);sum -= nums[left++];}}}return res == INT_MAX ? -1 : res;} };?
解法二:
class Solution { public:/*** @param nums: a vector of integers* @param s: an integer* @return: an integer representing the minimum size of subarray*/int minimumSize(vector<int> &nums, int s) {int res = INT_MAX, n = nums.size();vector<int> sums(n + 1, 0);for (int i = 1; i < n + 1; ++i) sums[i] = sums[i - 1] + nums[i - 1];for (int i = 0; i < n + 1; ++i) {int left = i + 1, right = n, t = sums[i] + s;while (left <= right) {int mid = left + (right - left) / 2;if (sums[mid] < t) left = mid + 1;else right = mid - 1;}if (left == n + 1) break;res = min(res, left - i);}return res == INT_MAX ? -1 : res;} };?
總結
以上是生活随笔為你收集整理的[LintCode] Minimum Size Subarray Sum 最小子数组和的大小的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XP 安装Oralce 10g 数据库
- 下一篇: 在阿里云上进行Docker应用的自动弹性