2025-07-04:统计符合条件长度为 3 的子数组数目。用go语言,给定一个整数数组 nums,请你计算有多少个长度恰好为 3 的连续子数组满足这样的条件:

2025-07-04:统计符合条件长度为 3 的子数组数目。用go语言,给定一个整数数组 nums,请你计算有多少个长度恰好为 3 的连续子数组满足这样的条件:子数组的第一个元素与第三个元素的和,正好是第二个元素的一半。请返回这个满足条件的子数组数量。

3 <= nums.length <= 100。

-100 <= nums[i] <= 100。

输入:nums = [1,2,1,4,1]。

输出:1。

解释:

只有子数组 [1,4,1] 包含 3 个元素且第一个和第三个数字之和是中间数字的一半。

题目来自力扣3392。

分步骤描述过程:

  1. 初始化变量

    • 首先,函数 countSubarrays 接收一个整数数组 nums 作为输入。
    • 计算数组的长度 n,即 nums 的元素个数。
    • 初始化计数器 ans 为 0,用于记录满足条件的子数组数量。
  2. 遍历数组

    • 使用一个 for 循环,从索引 i = 1 开始遍历到 i = n-2(即从第二个元素遍历到倒数第二个元素)。这是因为我们需要检查以 i 为中心的三个连续元素(nums[i-1]nums[i]nums[i+1])。
    • 对于每个 i,检查是否满足条件:nums[i] == (nums[i-1] + nums[i+1]) * 2。这个条件的意思是:中间元素的值是否等于第一个和第三个元素之和的两倍(即第一个和第三个元素之和是中间元素的一半)。
  3. 条件检查

    • 如果条件满足,则将计数器 ans 加 1。
    • 如果不满足,继续检查下一个 i
  4. 返回结果

    • 遍历完成后,返回 ans,即满足条件的子数组数量。
  5. 示例运行

    • 对于输入 nums = [1, 2, 1, 4, 1]
      • i = 1:检查 nums[0] = 1nums[1] = 2nums[2] = 1。条件是 2 == (1 + 1) * 2,即 2 == 4,不满足。
      • i = 2:检查 nums[1] = 2nums[2] = 1nums[3] = 4。条件是 1 == (2 + 4) * 2,即 1 == 12,不满足。
      • i = 3:检查 nums[2] = 1nums[3] = 4nums[4] = 1。条件是 4 == (1 + 1) * 2,即 4 == 4,满足,ans 加 1。
    • 最终 ans = 1,与题目描述一致。

时间复杂度:

  • 遍历数组时,for 循环的迭代次数是 n-2(因为 i 从 1 到 n-2)。
  • 每次迭代的操作是常数时间(比较和加法)。
  • 因此,总的时间复杂度是 O(n) ,其中 n 是数组的长度。

额外空间复杂度:

  • 只使用了固定数量的额外变量(nansi),与输入规模无关。
  • 因此,总的额外空间复杂度是 O(1)

Go完整代码如下:

go 复制代码
package main

import (
	"fmt"
)

func countSubarrays(nums []int) int {
	n := len(nums)
	ans := 0
	for i := 1; i < n-1; i++ {
		if nums[i] == (nums[i-1]+nums[i+1])*2 {
			ans++
		}
	}
	return ans
}

func main() {
	nums := []int{1, 2, 1, 4, 1}
	result := countSubarrays(nums)
	fmt.Println(result)
}

Python完整代码如下:

python 复制代码
# -*-coding:utf-8-*-

def count_subarrays(nums):
    n = len(nums)
    ans = 0
    for i in range(1, n - 1):
        if nums[i] == (nums[i - 1] + nums[i + 1]) * 2:
            ans += 1
    return ans

if __name__ == "__main__":
    nums = [1, 2, 1, 4, 1]
    result = count_subarrays(nums)
    print(result)
相关推荐
uzong1 小时前
技术故障复盘模版
后端
GetcharZp1 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程2 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研2 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi2 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国3 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy3 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack4 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
bobz9654 小时前
pip install 已经不再安全
后端
寻月隐君5 小时前
硬核实战:从零到一,用 Rust 和 Axum 构建高性能聊天服务后端
后端·rust·github