1. 程式人生 > 其它 >leetcode刷題——209. 長度最小的子陣列

leetcode刷題——209. 長度最小的子陣列

技術標籤:leetcode# 陣列leetcode陣列

給定一個含有 n 個正整數的陣列和一個正整數 s ,找出該陣列中滿足其和 ≥ s 的長度最小的 連續 子陣列,並返回其長度。如果不存在符合條件的子陣列,返回 0。

示例:

輸入:s = 7, nums = [2,3,1,2,4,3]
輸出:2
解釋:子陣列 [4,3] 是該條件下的長度最小的子陣列。

進階:

如果你已經完成了 O(n) 時間複雜度的解法, 請嘗試 O(n log n) 時間複雜度的解法。
通過次數106,550提交次數238,357

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/minimum-size-subarray-sum

著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解題思路

暴力,計算所有子序列,然後從子序列中選長度最小的

程式碼

class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int resultList=INT32_MAX;
        int i=0;
        int lengthList=0;
        int sum=0;
        for(int j=0;j<nums.size();j++)
        {
            sum+
=nums[j]; while(sum>=s) { lengthList=(j-i+1); resultList=resultList > lengthList ? lengthList : resultList; sum-=nums[i++]; } } return resultList == INT32_MAX ? 0 : resultList; } };

解題思路

滑動視窗,雙指標經典問題

程式碼

class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int resultList=65535;
        int lengthList=0;
        for(int i=0;i<nums.size();i++)
        {
            int sum=0;
            for(int j=i;j<nums.size();j++)
            {
                sum+=nums[j];
                if(sum>=s)
                {
                    lengthList=j-i+1;
                    resultList = resultList < lengthList ? resultList : lengthList;
                    break;
                }
            }
        }
        return resultList == 65535 ? 0 : resultList;
    }
};