LeetCode Daily 26
2022-2-9 T.2006 差的绝对值为k的数对数目
题目描述:
给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。 |x| 的值定义为: 如果 x >= 0 ,那么值为 x 。 如果 x < 0 ,那么值为 -x 。
示例:
输入: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]
思路 ①:
正常遍历数组,符合题意则记录。时间复杂度为O(n^2), 空间复杂度为O(1).
代码 ①:
class Solution { public: int countKDifference(vector<int>& nums, int k) { int ans = 0; for(int i = 0; i < nums.size(); i++) { for(int j = i + 1; j < nums.size(); j++) { if(abs(nums[i] - nums[j]) == k) ans++; } } return ans; } };
思路 ②:
题目所求为两数差的绝对值,则去统计 nums[i] - k,nums[i] + k两种情况即可。使用哈希表统计数目即可。
代码 ②:
class Solution { public: int countKDifference(vector<int>& nums, int k) { int ans = 0; unordered_map<int, int> map; for(int i = 0; i < nums.size(); i++) { ans += (map.count(nums[i] + k) ? map[nums[i] + k] : 0); ans += (map.count(nums[i] - k) ? map[nums[i] - k] : 0); map[nums[i]]++; } return ans; } };

浙公网安备 33010602011771号