【LeetCode面试150】——219存在重复元素

server/2024/11/27 23:46:40/

博客昵称:沈小农学编程

作者简介:一名在读硕士,定期更新相关算法面试,欢迎关注小弟!

PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘

题目难度:简单

默认优化目标:最小化时间复杂度。

Python默认为Python3。

1 题目描述

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 ij ,满足 nums[i] == nums[j]abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false

示例 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

提示:

  • 1 <= nums.length <= 105

  • -109 <= nums[i] <= 109

  • 0 <= k <= 105

2 题目分析

输入是一个整数数组nums和一个整数k,k表示距离。输出是布尔值。约束条件是要在距离内找到数组内是否有元素相等的数。有,返回true;否,返回false。

3 算法框架及代码实现

3.1 哈希表

我们可以创建一个哈希表table,用于记录nums各元素出现的位置。假定我们需要找i,j(i-j<=k)位置的元素,判断它们nums[i]==nums[j],如果不相等,说明j以前没有元素和nums[i]相等,就用j替换之前table中key=nums[j]的value值。

时间复杂度O(n),对于每个元素,哈希表的操作时间都是O(1),空间复杂度O(n)。

C++代码实现

class Solution {
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int,int> table;for(int i=0;i<nums.size();i++){int num =nums[i];if(table.count(num) && i-table[num]<=k){return true;}table[num]=i;}return false;       }
};

Python代码实现

python">class Solution:def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:table={}for i,num in enumerate(nums):if num in table and i-table[num]<=k:return Truetable[num]=ireturn False

3.2 滑动窗口

距离为k,也就意味着滑动窗口的大小为k。滑动就行,然后判断窗口内的元素是否存在相等的情况即可。窗口滑动的方法是将i-k-1下标的元素移除,将i的元素添加进来。窗口window用set来实现。

时间复杂度O(n),空间复杂度O(k)。

C++代码实现

class Solution {
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_set<int> window;for(int i=0;i<nums.size();i++){if(i>k){window.erase(nums[i-k-1]);}if(window.count(nums[i])){return true;}window.emplace(nums[i]);}return false;}
};

Python代码实现

python">class Solution:def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:window=set()for i,num in enumerate(nums):if i>k:window.remove(nums[i-k-1])if num in window:return Truewindow.add(num)return False

参考文献

力扣面试经典150题

力扣官方题解


http://www.ppmy.cn/server/145471.html

相关文章

【人工智能】AutoML自动化机器学习模型构建与优化:使用Auto-sklearn与TPOT的实战指南

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 机器学习模型的构建和优化是一个复杂且耗时的过程,涉及特征工程、模型选择、超参数调优等多个环节。AutoML(Automated Machine Learning)旨在通过自动化的方式来简化这些流程,提高开发效率并提升模型表现。Au…

Apache Calcite - calcite jdbc驱动使用场景

前言 在使用Calcite查询数据时通常会用到这些代码获取schema Connection connection DriverManager.getConnection("jdbc:calcite:", info); CalciteConnection calciteConnection connection.unwrap(CalciteConnection.class); SchemaPlus rootSchema calciteC…

设计模式-创建型-原型模式

1.概念 提前创建出一个对象&#xff0c;但在要使用该类对象时不是直接使用这个已经存在的对象&#xff0c;而是克隆一个新的对象。 2.作用 有时我们需要在不同的地方使用相同的对象&#xff0c;但是如果这个对象构成比较复杂的情况下&#xff0c;我们很难甚至不可能从头创建…

数据结构_图的应用

最小生成树 Prim算法 int AMGraph::sum(string v) {int start, totalW, cnt, minW, u, vv, i, j;start LocateVex(v); // 获取起始顶点编号memset(visited, false, sizeof(visited)); // 初始化访问状态visited[start] true;totalW 0; // 最小生成树的总权重cnt 1; // 当前…

简单理解下基于 Redisson 库的分布式锁机制

目录 简单理解下基于 Redisson 库的分布式锁机制代码流程&#xff1a;方法的调用&#xff1a;具体锁的实现&#xff1a;riderBalance 方法&#xff1a;tryLock 方法&#xff08;重载&#xff09;&#xff1a;tryLock 方法&#xff08;核心实现&#xff09;&#xff1a; 简单理解…

Leetcode 每日一题 3.无重复字符的最长子串

目录 问题描述 输入输出格式 示例 滑动窗口算法步骤 通过图片 代码实现 复杂度分析 题目地址 注意事项 问题描述 给定一个字符串 s&#xff0c;我们需要找出其中不含有重复字符的最长子串的长度。子串是指字符串中连续的字符序列&#xff0c;而子序列则是字符序列&am…

FastDFS基础概述与系统架构详解

目录 一、FastDFS简介二、FastDFS系统架构1. 跟踪服务器&#xff08;Tracker Server&#xff09;2. 存储服务器&#xff08;Storage Server&#xff09;3. 客户端&#xff08;Client&#xff09; 三、FastDFS功能逻辑分析1. 文件上传&#xff08;Upload File&#xff09;原理2.…

如何安全高效地打开和管理动态链接库(DLL)?系统提示dll丢失问题的多种有效修复指南

动态链接库&#xff08;DLL&#xff09;文件是Windows操作系统中非常重要的一部分&#xff0c;它们包含了程序运行所需的代码和数据。当系统提示DLL文件丢失时&#xff0c;可能会导致应用程序无法正常运行。以下是一些安全高效地打开和管理DLL文件以及修复DLL丢失问题的方法&am…