public 返回一陣列 陣列 滑動視窗拯救了你

2021-10-12 19:22:41 字數 1869 閱讀 6457

別不信,真的拯救了你

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

示例:輸入:s = 7, nums = [2,3,1,2,4,3]

輸出:2

解釋:子陣列 [4,3] 是該條件下的長度最小的子陣列。

這道題目暴力解法當然是 兩個for迴圈,然後不斷的尋找符合條件的子串行,時間複雜度很明顯是o(n^2) 。

**如下:

class solution }}

// 如果result沒有被賦值的話,就返回0,說明沒有符合條件的子串行return result == int32_max ? 0 : result;

}};

時間複雜度:o(n^2)

空間複雜度:o(1)

接下來就開始介紹陣列操作中另乙個重要的方法:「滑動視窗」

所謂滑動視窗,「就是不斷的調節子串行的起始位置和終止位置,從而得出我們要想的結果」

這裡還是以題目中的示例來舉例,s=7, 陣列是 2,3,1,2,4,3,來看一下查詢的過程:

最後找到 4,3 是最短距離。

其實從動畫中可以發現滑動視窗也可以理解為雙指標法的一種!只不過這種解法更像是乙個視窗的移動,所以叫做滑動視窗更適合一些。

在本題中實現滑動視窗,主要確定如下三點:

視窗就是 滿足其和 ≥ s 的長度最小的 連續 子陣列。

視窗的起始位置如何移動:如果當前視窗的值大於s了,視窗就要向前移動了(也就是該縮小了)。

視窗的結束位置如何移動:視窗的結束位置就是遍歷陣列的指標,視窗的起始位置設定為陣列的起始位置就可以了。

解題的關鍵在於 視窗的起始位置如何移動,如圖所示:

可以發現「滑動視窗的精妙之處在於根據當前子串行和大小的情況,不斷調節子串行的起始位置。從而將o(n^2)的暴力解法降為o(n)。」

class solution 

}// 如果result沒有被賦值的話,就返回0,說明沒有符合條件的子串行return result == int32_max ? 0 : result;

}};

時間複雜度:o(n)

空間複雜度:o(1)

-------end-------

我將演算法學習相關的資料已經整理到了github :裡面還有leetcode刷題攻略、各個型別經典題目刷題順序、思維導圖看一看一定會有所收穫!

趕緊給「**隨想錄」加乙個星標吧,方便第一時間閱讀文章往期

精彩回顧陣列:就移除個元素很難麼?陣列:每次遇到二分法,都是一看就會,一寫就廢雙指標法:一樣的道理,能解決四數之和雜湊表:解決了兩數之和,那麼能解決三數之和麼?

「**隨想錄」期待你的關注!

每天8:35準時推送一道經典演算法題目,推送的每道題目都不是孤立的,而是由淺入深,環環相扣,幫你梳理演算法知識脈絡,輕鬆學演算法!

陣列一 陣列概述 c

一.數組概述 1 1.陣列?陣列是帶索引的同型別的物件的集合.陣列是一種資料結構,它包含若干相同型別的變數。陣列是乙個經過索引的物件集合。例如 int array 1 2.陣列的元素?包含在乙個陣列中的變數通常稱為陣列的元素 也叫變數的元素.在定義陣列時 可以預先指定陣列元素的個數 這時候在 中指定...

Php學習《一》 陣列

1.陣列分類 a.帶值陣列 帶有數字 id 鍵的陣列 可以使用不同的方法來建立數值陣列 例子 1 在這個例子中,會自動分配 id 鍵 names array peter quagmire joe 例子 2 在這個例子中,我們人工分配的 id 鍵 names 0 peter names 1 quagm...

PHP 參考指南(一) 陣列

陣列能夠在單獨的變數名中儲存乙個或多個值。cars array volvo bmw saab 陣列是特殊的變數,它可以同時儲存乙個以上的值。如果您有乙個專案列表 例如汽車品牌列表 在單個變數中儲存這些品牌名稱是這樣的 cars1 volvo cars2 bmw cars3 saab 不過,假如您希望...