LeetCode探索之旅(62)-219是否重复

今天继续刷LeetCode,第219题,判断一个数组中是否有相等的元素,并且两者下标相差k。

分析:
1、这个题目可以通过简单粗暴的方式,每遍历到一个元素,就比较其后面k个数是否和这个数相等,否则就继续遍历,这个方法虽然可行,但是时间复杂度是O(nk),超时。
2、那么可以通过设置一个map映射,每遍历一个元素,就判断map中是否有该元素,并且下标之差为k,这个查找只需要O(1)的查找时间,因此整个时间复杂度为O(n),当然需要额外的空间开销。

问题:
1、map的使用;
2、python中map的使用是字典

附上C++代码:

class Solution {
public:
    bool containsNearbyDuplicate(vector& nums, int k) {
        unordered_map m;
        for(int i=0;i

附上Python代码:

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        m={}
        for i in range(len(nums)):
            if nums[i] in m and i-m[nums[i]]<=k:
                return True
            else:
                m[nums[i]]=i
        return False

你可能感兴趣的:(代码训练)