您好,登錄后才能下訂單哦!
小編給大家分享一下LeetCode如何解決數組中K-diff數對的問題,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
給定一個整數數組和一個整數 k, 你需要在數組里找到不同的 k-diff 數對。這里將 k-diff 數對定義為一個整數對 (i, j), 其中 i 和 j 都是數組中的數字,且兩數之差的絕對值是 k。
示例 1:
解釋: 數組中有兩個 2-diff 數對, (1, 3) 和 (3, 5)。盡管數組中有兩個 1,但我們只應返回不同的數對的數量。
利用兩個數的絕對值之差為 k 的關系 x - y = k,推出 y = x - k 和 x = y + k:
要注意 set 中相同的元素只存放一次,所以對于 3 1 4 1 5 的情況,diff 集合中只會保存 1 個元素 1,表示只有一個 (1, 3) 數對。
class Solution {
public:
int findPairs(vector<int>& nums, int k) {
if (k < 0)
return 0;
// 保存訪問的元素
std::set<int> saw;
// 保存 k-diff 數對中較小的那個
// 也可以保存較大的,只用來統計數對個數
std::set<int> diff;
for (int i = 0; i < nums.size(); i++) {
// 檢查數對中較小的數 1 是否在數組中:3 - 2 = 1
if (saw.find(nums[i] - k) != saw.end())
diff.insert(nums[i] - k); // 插入數對中較小的數 1
// 檢查數對中較大的數 3 是否在數組中:1 + 2 = 3
if (saw.find(nums[i] + k) != saw.end())
diff.insert(nums[i]); // 插入數對中較小的數 1
saw.insert(nums[i]);
}
// 因為 set 中不存在重復元素
// 所以不同的元素個數代表不同的 k-diff 數對個數
return diff.size();
}
};
看完了這篇文章,相信你對“LeetCode如何解決數組中K-diff數對的問題”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。