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<int>& nums, int k) {
        unordered_map<int,int> m;
        for(int i=0;i<nums.size();i++)
        {
            if(m.find(nums[i])!=m.end()&&(i-m[nums[i]]<=k))
                return true;
            m[nums[i]]=i;
        }
        return false;
    }
};

附上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

猜你喜欢

转载自blog.csdn.net/JerryZengZ/article/details/88820500