【LetMeFly】3392.統計符合條件長度為 3 的子數組數目:一次遍歷模擬
力扣題目鏈接:https://leetcode.cn/problems/count-subarrays-of-length-three-with-a-condition/
給你一個整數數組?nums
?,請你返回長度為 3 的 子數組,滿足第一個數和第三個數的和恰好為第二個數的一半。
子數組?指的是一個數組中連續 非空?的元素序列。
?
示例 1:
輸入:nums = [1,2,1,4,1]
輸出:1
解釋:
只有子數組?[1,4,1]
?包含 3 個元素且第一個和第三個數字之和是中間數字的一半。number.
示例 2:
輸入:nums = [1,1,1]
輸出:0
解釋:
[1,1,1]
?是唯一長度為 3 的子數組,但第一個數和第三個數的和不是第二個數的一半。
?
提示:
3 <= nums.length <= 100
-100 <= nums[i] <= 100
解題方法:一次遍歷模擬
用變量 i i i從第三個元素開始向后遍歷數組,若 ( n u m s [ i ] + n u m s [ i ? 2 ] ) ? 2 = = n u m s [ i ? 1 ] (nums[i] + nums[i - 2]) * 2 == nums[i - 1] (nums[i]+nums[i?2])?2==nums[i?1],則答案數量加一。
- 時間復雜度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
- 空間復雜度 O ( 1 ) O(1) O(1)
AC代碼
C++
/** @Author: LetMeFly* @Date: 2025-04-27 23:47:30* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-04-27 23:48:38*/
class Solution {
public:int countSubarrays(vector<int>& nums) {int ans = 0;for (int i = 2; i < nums.size(); i++) {ans += (nums[i] + nums[i - 2]) * 2 == nums[i - 1];}return ans;}
};
Python
'''
Author: LetMeFly
Date: 2025-04-27 23:49:08
LastEditors: LetMeFly.xyz
LastEditTime: 2025-04-27 23:49:26
'''
from typing import Listclass Solution:def countSubarrays(self, nums: List[int]) -> int:return sum((nums[i - 2] + nums[i]) * 2 == nums[i - 1] for i in range(2, len(nums)))
Golang
/** @Author: LetMeFly* @Date: 2025-04-27 23:49:15* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-04-27 23:52:54* @Description: AC,100.00%,95.45%*/
package mainfunc countSubarrays(nums []int) (ans int) {for i := 2; i < len(nums); i++ {if (nums[i] + nums[i - 2]) * 2 == nums[i - 1] {ans++}}return
}
Java
/** @Author: LetMeFly* @Date: 2025-04-27 23:49:11* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-04-27 23:50:25*/
class Solution {public int countSubarrays(int[] nums) {int ans = 0;for (int i = 2; i < nums.length; i++) {if ((nums[i - 2] + nums[i]) * 2 == nums[i - 1]) {ans++;}}return ans;}
}
同步發文于CSDN和我的個人博客,原創不易,轉載經作者同意后請附上原文鏈接哦~
千篇源碼題解已開源