ETH官方钱包

前往
大廳
主題

LeetCode - 2762. Continuous Subarrays 解題心得

Not In My Back Yard | 2024-09-23 12:00:16 | 巴幣 2 | 人氣 99

題目連結:


題目意譯:
你被給定一個索引值從 0 開始的整數陣列 nums。一個 nums 的子陣列是「連續的」,代表著:
    令 i 、 i + 1 、 …… 、 j 為此子陣列的索引值。則對於每一個索引值對 i ≦ i1, i2 ≦ j,都滿足 0 ≦ |nums[i1] - nums[i2]| ≦ 2。

回傳連續子陣列之總數。

一個子陣列為一個陣列中的一個連續非空元素序列。

限制:
1 ≦ nums.length ≦ 10 ^ 5
1 ≦ nums[i] ≦ 10 ^ 9



範例測資:
範例 1:
輸入: nums = [5,4,2,4]
輸出: 8
解釋:
長度為 1 的連續子陣列:[5] 、 [4] 、 [2] 、 [4]。
長度為 2 的連續子陣列:[5,4] 、 [4,2] 、 [2,4]。
長度為 3 的連續子陣列:[4,2,4].
沒有長度 4 的連續子陣列。
連續子陣列總數 = 4 + 3 + 1 = 8。
可以證明沒有更多的連續子陣列存在。

範例 2:
輸入: nums = [1,2,3]
輸出: 6
解釋:
長度為 1 的連續子陣列:[1] 、 [2] 、 [3]。
長度為 2 的連續子陣列:[1,2] 、 [2,3]。
長度為 3 的連續子陣列:[1,2,3].
連續子陣列總數 = 3 + 2 + 1 = 6。


解題思維:
典型的滑動視窗(Sliding Window)之題型,如這題。

而本題的「連續」性質可以看作是最大值減最小值 ≦ 2。因此一個視窗中最多只會有四種數值,所以不管是直接排序這四種數值或是用雜湊表都差不多快。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。
追蹤 創作集

作者相關創作

更多創作