2367. 算术三元组的数目

文章讲述了如何在给定整数数组nums和正整数diff的条件下,使用暴力遍历和哈希表两种方法计算满足nums[j]-nums[i]=diff且nums[k]-nums[j]=diff的算术三元组数量。哈希表的方法显著提高了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

给你一个下标从 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 。

思路:

1.无脑暴力遍历
2.哈希表

语法知识:

  1. unordered_set s{nums.begin(), nums.end()} 创建一个无序集合(unordered_set)对象s,并将一个整数数组nums中的元素作为初始化参数传递给s。这样做的效果是将nums中的元素添加到s中,而且s中不会包含重复的元素
  2. s.count(x - diff) 具体来说,count()函数接受一个参数,即要查找的元素。它会返回一个整数值,表示该元素在集合中的出现次数。如果该元素存在于集合中,则返回1;如果不存在,则返回0。

count()函数可以用来判断集合中是否存在某个元素,或者统计某个元素在集合中出现的次数。

代码:

//法一:暴力循环
class Solution {
public:
    int arithmeticTriplets(vector<int>& nums, int diff) {
        int num=0;
        for(int i=0;i<nums.size();i++)
        {
          for(int j=1;j<nums.size();j++)
          {
              if(nums[j]-nums[i]==diff)
              {
                  for(int k=j+1;k<nums.size();k++)
                  {
                      if(nums[k]-nums[j]==diff)
                      num++;
                  }
              }
          }
        }
        return num;
    }
};
//法二:哈希表
class Solution {
public:
    int arithmeticTriplets(vector<int> &nums, int diff) {
        int ans = 0;
        unordered_set<int> s{nums.begin(), nums.end()};
        for (int x: nums)
            if (s.count(x - diff) && s.count(x + diff))
                ++ans;
        return ans;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值