寫在前面
題目詳情
給定一個整數數組和一個整數 k,判斷數組中是否存在兩個不同的索引 i 和 j,使得 nums [i] = nums [j],並且 i 和 j 的差的 絕對值 至多爲 k。
示例 1:
輸入: nums = [1,2,3,1], k = 3
輸出: true
示例 2:
輸入: nums = [1,0,1,1], k = 1
輸出: true
示例 3:
輸入: nums = [1,2,3,1,2,3], k = 2
輸出: false
ac代碼
- unordered_set集合 + 內置函數
- uset 維持最大長度 k
- 爲了保證unorder_set的元素個數小於等於k,所以當元素個數大於k時,刪除掉unorder_set中的第一個元素
class Solution
{
public:
bool containsNearbyDuplicate(vector<int>& nums, int k)
{
unordered_set<int> uset;
for(int i=0; i<nums.size(); i++)
{
if(uset.find(nums[i]) != uset.end())
return true;
else
uset.insert(nums[i]);
if(uset.size() > k)
uset.erase(nums[i-k]);
}
return false;
}
};
class Solution
{
public:
bool containsNearbyDuplicate(vector<int>& nums, int k)
{
for (int i = 0; i < nums.size(); i++)
for (int j = 1; j <= k; j++)
if(i+j<nums.size() && nums[i] == nums[i+j])
return true;
return false;
}
};