入门力扣自学笔记254 C++ (题目编号:2367)

2367. 算术三元组的数目

题目:

给你一个下标从 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 严格 递增


来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/number-of-arithmetic-triplets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


思路:

首先,我们建立一个map容器来存储原nums容器中的所有数据。

其次,我们对nums容器进行遍历,并将其中的每个值当做map的键放入到map容器中,令值为i。

最后,我们再次遍历nums容器,并且利用count函数,把每个值当做中间值,判断是否存在合适的三元组,如果存在,就令答案ans加一。

返回最终结果ans即可。


代码:

class Solution {
public:
    int arithmeticTriplets(vector& nums, int diff) {
        int ans = 0;
        map mp;
        for(int i = 0;i < nums.size();i++)
            mp[nums[i]] = i;
        for(int i = 1;i < nums.size();i++)
            if(mp.count(nums[i] - diff) && mp.count(nums[i] + diff))
                ans++;
        return ans;
    }
};

你可能感兴趣的:(力扣算法学习,c++,leetcode,算法)