陣列//長度最小的子陣列
阿新 • • 發佈:2018-12-19
給定一個含有 n 個正整數的陣列和一個正整數 s ,找出該陣列中滿足其和 ≥ s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。
示例:
輸入:s = 7, nums = [2,3,1,2,4,3]
輸出: 2 解釋: 子陣列[4,3]
是該條件下的長度最小的連續子陣列。
進階:
如果你已經完成了O(n) 時間複雜度的解法, 請嘗試 O(n log n) 時間複雜度的解法。
class Solution { public: int minSubArrayLen(int s, vector<int>& nums) { int n = nums.size(); int cur_sum = 0; int min_size = INT_MAX; int begin = 0, end = 0; while(begin < n){ if(cur_sum < s&&end < n){ cur_sum+=nums[end++]; }else if(cur_sum >= s){ min_size = min(min_size, end-begin); cur_sum -= nums[begin++]; } else{ break; } } return (min_size == INT_MAX)?0:min_size; } };
class Solution { public: int minSubArrayLen(int s, vector<int>& nums) { int n = nums.size(); if(n == 0) return 0; int min_size = INT_MAX; int cur_sum = 0; int begin = 0; for(int end = 0; end < n; end++){ cur_sum+=nums[end]; while(cur_sum >= s){ min_size = min(min_size, end-begin+1); cur_sum -= nums[begin++]; } } return (min_size == INT_MAX)?0:min_size; } };