第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

LeetCode 219: 存在重復(fù)元素 II Contains Duplicate II

標(biāo)簽:
Java Python 算法

题目:

​ 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 ij,使得 nums [i] = nums [j],并且 ij 的差的绝对值最大为 k

​ Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most 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

解题思路:

​ 遍历数组, 维护一个大小为 K 的滑动窗口, 该窗口遍历到的第 i 个元素, 后 K 个元素组成的数组 nums[ i, i + K] ,查找该数组内是否有与 nums[i] 相等的元素

​ 可以优化的地方只有维护的滑动窗口这一部分, 降低在这个动态数组中查找操作的时间复杂度

优化一个数组内的查找时间复杂度的方法非常多:

  • 暴力破解: 直接操作指针将正在遍历的元素与其之后 K 个元素的节对比
  • 平衡二叉树: 构建一个平衡二叉树维护这个滑动窗口
  • 哈希集合: 维护一个长度为 K 的哈希集合,查找复杂度为 O(1)

秦策只有用哈希集合维护滑动窗口才不会超时

HashSet解题:

Java:

class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        HashSet<Integer> set=new HashSet<>();
        for(int i=0;i<nums.length;i++){
            if(set.contains(nums[i])) return true;
            set.add(nums[i]);
            if(set.size()>k) set.remove(nums[i - k]);
        }
        return false;
    }
}

Python:

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        hash_set = set()
        for i, num in enumerate(nums):
            if num in hash_set: return True
            hash_set.add(num)
            if (len(hash_set) > k): hash_set.remove(nums[i - k])
點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消