leetcode-219. 存在重複元素 II刷題筆記(c++)

寫在前面

  • 實力真心菜,,,,
    • 2次循環,暴力破解
    • 1次循環

題目詳情

給定一個整數數組和一個整數 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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章