美文网首页
2023-03-31 LeetCode:2367. 算术三元组的

2023-03-31 LeetCode:2367. 算术三元组的

作者: alex很累 | 来源:发表于2023-03-30 15:44 被阅读0次

    2367. 算术三元组的数目

    问题描述

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

    • i < j < k
    • nums[j] - nums[i] == diff
    • nums[k] - nums[j] == diff
      返回不同 算术三元组 的数目。

    示例

    输入: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 。
    
    输入: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 。
    

    解题思路

    核心思路:哈希
    我们可以将数存到Set中,然后遍历数组枚举第一个整数,从Set中寻找满足条件的第二、三个整数是否存在。

    代码示例(JAVA)

    class Solution {
        public int arithmeticTriplets(int[] nums, int diff) {
            Set<Integer> set = new HashSet<>();
            for (int num : nums) {
                set.add(num);
            }
    
            int res = 0;
            for (int num : nums) {
                if (set.contains(num + diff) && set.contains(num + 2 * diff)) {
                    res++;
                }
            }
            return res;
        }
    }
    

    算法复杂度:O(n)
    注:这个在力扣中并不能击败100%,可以考虑建一个长数组来代替Set

    class Solution {
        public int arithmeticTriplets(int[] nums, int diff) {
            int length = nums.length, max = nums[length - 1];
            int[] arr = new int[max + 1];
            for (int i = 0; i < length; i++) {
                arr[nums[i]] = 1;
            }
            
            int res = 0;
            for (int i = 0; i < length - 2; i++) {
                if (nums[i] + 2 * diff <= max 
                && arr[nums[i] + diff] == 1 && arr[nums[i] + 2 * diff] == 1) {
                    res++;
                }
            }
            return res;
        }
    }
    

    相关文章

      网友评论

          本文标题:2023-03-31 LeetCode:2367. 算术三元组的

          本文链接:https://www.haomeiwen.com/subject/bfhcddtx.html