1. 程式人生 > >陣列//長度最小的子陣列

陣列//長度最小的子陣列

給定一個含有 個正整數的陣列和一個正整數 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;
    }
};