LeetCode 题解工作台

等差三元组的数目

给你一个下标从 0 开始、 严格递增 的整数数组 nums 和一个正整数 diff 。如果满足下述全部条件,则三元组 (i, j, k) 就是一个 等差三元组 : i , nums[j] - nums[i] == diff 且 nums[k] - nums[j] == diff 返回不同 等差三元组…

category

4

题型

code_blocks

5

代码语言

hub

3

相关题

当前训练重点

简单 · 数组·哈希·扫描

bolt

答案摘要

我们注意到,数组 的长度只有不超过 ,因此可以直接暴力枚举 , , ,判断是否满足条件,若满足,累加三元组数目。 时间复杂度 ,其中 为数组 的长度。空间复杂度 。

Interview AiBox logo

Interview AiBox 实时 AI 助手,陪你讲清 数组·哈希·扫描 题型思路

试试 AiBox 面试助手arrow_forward
description

题目描述

给你一个下标从 0 开始、严格递增 的整数数组 nums 和一个正整数 diff 。如果满足下述全部条件,则三元组 (i, j, k) 就是一个 等差三元组

  • i < j < k
  • nums[j] - nums[i] == diff
  • nums[k] - nums[j] == diff

返回不同 等差三元组 的数目

 

示例 1:

输入:nums = [0,1,4,6,7,10], diff = 3
输出:2
解释:
(1, 2, 4) 是等差三元组:7 - 4 == 3 且 4 - 1 == 3 。
(2, 4, 5) 是等差三元组:10 - 7 == 3 且 7 - 4 == 3 。

示例 2:

输入:nums = [4,5,6,7,8,9], diff = 2
输出:2
解释:
(0, 2, 4) 是等差三元组:8 - 6 == 2 且 6 - 4 == 2 。
(1, 3, 5) 是等差三元组:9 - 7 == 2 且 7 - 5 == 2 。

 

提示:

  • 3 <= nums.length <= 200
  • 0 <= nums[i] <= 200
  • 1 <= diff <= 50
  • nums 严格 递增
lightbulb

解题思路

方法一:暴力枚举

我们注意到,数组 numsnums 的长度只有不超过 200200,因此可以直接暴力枚举 ii, jj, kk,判断是否满足条件,若满足,累加三元组数目。

时间复杂度 O(n3)O(n^3),其中 nn 为数组 numsnums 的长度。空间复杂度 O(1)O(1)

1
2
3
4
class Solution:
    def arithmeticTriplets(self, nums: List[int], diff: int) -> int:
        return sum(b - a == diff and c - b == diff for a, b, c in combinations(nums, 3))
speed

复杂度分析

指标
时间Depends on the final approach
空间Depends on the final approach
psychology

面试官常问的追问

外企场景
  • question_mark

    The candidate understands the value of hash lookup for optimizing time complexity.

  • question_mark

    The candidate may propose multiple approaches with an understanding of trade-offs in performance.

  • question_mark

    The candidate mentions array scanning or two-pointer techniques to handle the problem efficiently.

warning

常见陷阱

外企场景
  • error

    Failing to correctly handle boundary conditions, such as ensuring the array is strictly increasing.

  • error

    Overcomplicating the solution when a simple hash lookup or two-pointer technique would suffice.

  • error

    Assuming that brute force is always an acceptable solution without considering time constraints for larger inputs.

swap_horiz

进阶变体

外企场景
  • arrow_right_alt

    What if the array was not strictly increasing? This could require a different approach to ensure the difference condition holds.

  • arrow_right_alt

    What if the diff value is much larger than the array size? This would require careful handling to avoid unnecessary checks.

  • arrow_right_alt

    Can the problem be adapted to find the number of arithmetic triplets in a non-zero-indexed array or with negative integers?

help

常见问题

外企场景

等差三元组的数目题解:数组·哈希·扫描 | LeetCode #2367 简单