3392. 統計符合條件長度為 3 的子數組數目
問題
問題分析
統計符合條件的長度為 3 的子數組數目。具體條件是:子數組的第一個數和第三個數的和恰好為第二個數的一半。
思路
遍歷數組:由于子數組長度固定為 3,我們可以通過遍歷數組來檢查每個長度為 3 的子數組是否滿足條件。
檢查條件:對于每個子數組 [nums[i], nums[i+1], nums[i+2]],檢查是否滿足 nums[i] + nums[i+2] == nums[i+1] / 2。
計數:如果滿足條件,則計數器加 1。
代碼
def count_good_subarrays(nums):count = 0n = len(nums)# 遍歷數組,檢查每個長度為 3 的子數組for i in range(n - 2):# 檢查條件:第一個數和第三個數的和恰好為第二個數的一半if nums[i] + nums[i + 2] == nums[i + 1] / 2:count += 1return count
復雜度分析
時間復雜度:算法的時間復雜度為 (O(n)),其中 (n) 是數組 nums 的長度。這是因為在最壞情況下,算法需要遍歷數組一次,并對每個長度為 3 的子數組進行常數時間的檢查。
空間復雜度:算法的空間復雜度為 (O(1)),因為只使用了常數級的額外空間。
學習
定義 countSubarrays 方法:
def countSubarrays(self, nums: List[int]) -> int::定義一個方法 countSubarrays,接受一個整數列表 nums 作為參數,并返回一個整數。
ans = 0:初始化計數器 ans 為 0,用于記錄滿足條件的子數組數量。
n = len(nums):獲取數組 nums 的長度。
遍歷數組:
for i in range(n - 2)::遍歷數組,確保每次檢查的子數組長度為 3。
條件檢查:
if nums[i] + nums[i + 2] == nums[i + 1] / 2::檢查當前子數組是否滿足題目要求,即第一個數和第三個數的和恰好為第二個數的一半。
計數:
ans += 1:如果滿足條件,計數器 ans 加 1。
返回結果:
return ans:方法最后返回計數器 ans 的值。