成都网站外包公司,做自己的网站如何赚钱的,同一网站能否同时运行php和asp,网站建设好怎么才有生意数组中的 k-diff 数对
532. 数组中的 k-diff 数对 - 力扣#xff08;LeetCode#xff09;
题目
给你一个整数数组 nums 和一个整数 k#xff0c;请你在数组中找出 不同的 k-diff 数对#xff0c;并返回不同的 k-diff 数对 的数目。
k-diff 数对定义为一个整数对 (nums[…数组中的 k-diff 数对
532. 数组中的 k-diff 数对 - 力扣LeetCode
题目
给你一个整数数组 nums 和一个整数 k请你在数组中找出 不同的 k-diff 数对并返回不同的 k-diff 数对 的数目。
k-diff 数对定义为一个整数对 (nums[i], nums[j]) 并满足下述全部条件
0 i, j nums.lengthi ! j|nums[i] - nums[j]| k
注意|val| 表示 val 的绝对值。 示例 1
输入nums [3, 1, 4, 1, 5], k 2
输出2
解释数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。
尽管数组中有两个 1 但我们只应返回不同的数对的数量。示例 2
输入nums [1, 2, 3, 4, 5], k 1
输出4
解释数组中有四个 1-diff 数对, (1, 2), (2, 3), (3, 4) 和 (4, 5) 。示例 3
输入nums [1, 3, 1, 5, 4], k 0
输出1
解释数组中只有一个 0-diff 数对(1, 1) 。提示
1 nums.length 104-107 nums[i] 1070 k 107
自己的思路和代码
思路 思路很简单当k0的时候就统计数组中相同元素的个数就可以了。当k≠0时我们可以想把数组存储到一个set中这样保证了顺序也去除了相同的元素然后利用双指针就可以解决问题了。
代码
class Solution {
public:int findPairs(vectorint nums, int k) {if(nums.size() 1) return 0;int sum 0;if(k0) {unordered_mapint, int map;for(auto i : nums) {map[i];}for(auto itmap.begin(); it!map.end(); it) {if(it-second1) sum;}} else {setint table;for(auto i : nums) {table.insert(i);}if(table.size() 1) sum 0;auto lefttable.begin(), righttable.begin();while(right!table.end() left ! --table.end()) {if(*right - *left k) {right;} else if(*right - *left k) {sum;left;right;} else {left;}}}return sum;}
};