给你一个整数数组nums和一个整数k,请你返回数对(i, j)的数目,满足i < j|nums[i] - nums[j]| == k

|x|的值定义为:

  • 如果x >= 0,那么值为x
  • 如果x < 0,那么值为-x
     

示例 1:

输入:nums = [1,2,2,1], k = 1
输出:4
解释:差的绝对值为 1 的数对为:
- [1,2,2,1]
- [1,2,2,1]
- [1,2,2,1]
- [1,2,2,1]

示例 2:

输入:nums = [1,3], k = 3
输出:0
解释:没有任何数对差的绝对值为 3 。

示例 3:

输入:nums = [3,2,1,5,4], k = 2
输出:3
解释:差的绝对值为 2 的数对为:
- [3,2,1,5,4]
- [3,2,1,5,4]
- [3,2,1,5,4]

提示:

  • 1 <= nums.length <= 200
  • 1 <= nums[i] <= 100
  • 1 <= k <= 99
  1. 暴力检索
    Python:

    class Solution:
    def countKDifference(self, nums: List[int], k: int) -> int:
        total = 0
        for i in range(len(nums)-1):
            for j in range(i+1, len(nums)):
                if abs(nums[i] - nums[j]) == k:
                    total += 1
        return total

    Java:

    class Solution {
    public int countKDifference(int[] nums, int k) {
        int total = 0;
        for(int i = 0; i < nums.length-1; i++)
        {
            for(int j = i+1; j < nums.length; j++)
            {
                if(Math.abs(nums[i] - nums[j]) == k)
                {
                    total++;
                }
            }
        }
        return total;
    }
    }
  2. 计数
    Python:

    class Solution:
    def countKDifference(self, nums: List[int], k: int) -> int:
        total = 0
        index = [0 for i in range(101)]
        for num in nums:
            index[num] += 1
        for i in range(len(index)-k):
            total += index[i] * index[i+k]
        return total 

    Java:

    class Solution {
    public int countKDifference(int[] nums, int k) {
        int total = 0;
        int index[] = new int[101];
        for(int num: nums)
        {
            index[num] += 1;
        }
    
        for(int i = 0; i < index.length-k; i++)
        {
            total += index[i] * index[i+k];
        }
        return total;
    }
    }
最后修改日期: 2021年12月31日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。