当前位置: 首页 > Web前端 > HTML5

LeetCode-219,有重复的元素二.(java)

时间:2023-04-04 22:41:18 HTML5

1.前言对于那些没有工作或者即将失业又想重新面试的小伙伴们,臭虫想继续这几个月更新的专栏《每日一题LeetCode》又准备好了,就是为了帮小伙伴们顺利上岸,拿到心仪的offer,而面试的第一关就是算法题。因为我始终坚信,变强绝对不是一蹴而就的,而是长期坚持和坚持的价值。所以,快点跟上虫菌的步伐卷起来吧,从这一刻开始变强吧。2.题目描述题目:给定一个整数数组nums和一个整数k,判断数组中是否存在两个不同的索引i和j,满足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<=10^5-10^9<=nums[i]<=10^90<=k<=10^5三、思维分析217.有重复元素》,今天这道题是它的变体,其实本质上就是让你找到满足条件的值,满足返回true还是false。今天的问题其实比较简单。无非就是满足一定的条件,组i和j是否存在,存在则返回true,不存在则返回false。那么我们最直接的做法肯定是暴力求解,不就是定义一个嵌套的for,然后只需要满足nums[j]==nums[i],然后直接返回,否则继续遍历直到遍历,默认返回False即可。这是常规解题方法中最常想到的。接下来讲一个比较优雅的方法。不就是找出有没有满足这个条件的数组下标吗?那么我们就可以通过一个map将数组的不同编号一一保存,其中key为nums[index],value为index(数组下标)。如果map判断key已经存在,说明数组有相同的元素,满足条件1,然后验证这两个数的数组下标值是否满足小于等于k的条件。需要注意的是,如果不满足小于k的条件,直接更新map中nums[index]对应的值(只记录每个元素的最大下标。如果有元素等于nums[i]在下标i之前,应该是在这些元素中寻找最大的下标j,判断i-j≤k是否为真。)4.算法实现暴力法-AC代码具体算法代码实现如下:classSolution{publicbooleancontainsNearbyDuplicate(int[]nums,int{//将条件带入for(inti=0;imap=newHashMap();intlength=nums.length;for(inti=0;i