题目描述:

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

示例描述:

题目分析:

要求我们找到数组中的重复元素,并且将这两个重复元素的索引差取绝对值之后不大于k,如果只是分析到这里,这道题目肯定是会错误的,他其实有几个隐含的条件:比如说条件一:当没有重复元素的时候,返回的是false;条件二,当有多个数组元素的值相等时,一定要取索引值最小的那一个,可以看到示例图第二个的描述;最抗人的就是这个了,如果你分析题目的时候不仔细,那么恭喜你,你在写的时候肯定会出问题

代码思路:

首先判断是否有重复的,如果有重复的,那么开始找相同的索引值,如果相同的数组值有多个,那么索引值一定要找到最小的那一个,比较索引值是否小于等于k,如果是,返回true,如果不是,返回false

代码如下:

var containsNearbyDuplicate = function(nums, k) {let n =-1;let num =120let map =new Map()for(let i of nums){if(map.has(i)){n=1break}else{map.set(i,1)}}if(n !=-1){for(var i=0;i<nums.length;i++){for(var j=i+1;j<nums.length;j++){if(nums[i]  ===nums[j]){if(num>j-i){num =j-i}}}}if(num <=k) return trueelse return false}else  return false
};

代码解析:

首先判断是否有重复,使用哈希函数,如果有,就开始新的判断,如果没有,那么就直接返回false,在判断的时候,使用暴力循环,不断地判断是否有相同数组值,有的话找出差值与k作比较,大于返回false,小于等于返回true

虽然自己做出来了,但是自己写的代码有一说一,真的不行,时间复杂度太高了,我当时提交的时候以为会超时,索性没有超时,但是问题也很严重,时间太久了,所以看了一下别人的,发现做的是真的很好,发出来一起欣赏一下(最搞的是,我其实想到这种方法了,但是无法实现,还是数据结构没有学习扎实)

    var containsNearbyDuplicate = function(nums, k) {const set = new Set();// 遍历数组for(let i = 0; i < nums.length; i++) {// 如果集合中存在当前数,证明存在nums [i] = nums [j],则返回trueif(set.has(nums[i])) {return true;}// 否则加入集合set.add(nums[i]);// 若集合元素数量多于k,则删除最先来的if(set.size > k) {set.delete(nums[i - k]);}}return false;};

写的真的好,以后向这个看齐

存在重复元素 II(简单题)相关推荐

  1. list元素求和_LeetCode刷题实战82:删除排序链表中的重复元素 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  2. 【快乐水题】219. 存在重复元素 II

    原题: 力扣链接:219. 存在重复元素 II 题目简述: 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] ...

  3. 算法---删除排序链表中的重复元素 II

    删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 .返回 已排序的链表 . 输入:head = [1,2,3,3,4,4,5] ...

  4. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历

    Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...

  5. 删除排序链表中的重复元素 II

    82. 删除排序链表中的重复元素 II 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字. 返回同样按升序排 ...

  6. leetcode算法题--删除排序链表中的重复元素 II

    原题链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/ 1.map ListNode* deleteD ...

  7. 每日一题:leetcode82. 删除排序链表中的重复元素 II

    题目描述 题目分析 这才是正常的中等题难度嘛,昨天的中等题题解我半天看不懂... 首先,需要增加一个哑节点(操作链表的常规操作),因为有可能删除首节点,我们不想要为首节点添加单独的逻辑.其次,用一个变 ...

  8. leetcode217. 存在重复元素(vip题)超简单

    给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: 输入: [1,2,3,1] 输出: true ...

  9. Leetcode 217. 存在重复元素 (每日一题 20210913)

    给定一个整数数组,判断是否存在重复元素.如果存在一值在数组中出现至少两次,函数返回 true .如果数组中每个元素都不相同,则返回 false .示例 1:输入: [1,2,3,1] 输出: true ...

最新文章

  1. 统计简单学_回归分析
  2. shell编程入门步步高(八、函数)
  3. 降低软件复杂性一般原则和方法
  4. (11)FPGA面试题同步复位与异步复位
  5. java shell文件_Java 文件读写示例1
  6. Oracle----oracle小知识总结
  7. java1.8.0_java jdk官方下载|java jdk v1.8.0 官方免费版-520下载站
  8. 大型电商数据库设计与分析
  9. 使用国密函数读取金税盘信息
  10. 正则校验6-18位字母加数字密码
  11. 绕过tp路由器管理密码_TP-Link路由器登录密码怎么重置【详细介绍】
  12. 网易面试总结——面试案例9~面试案例12
  13. ctf夏季集训结训赛-简单题writeup
  14. 营业执照识别/发票识别在供应链与物流智能移动解决方案
  15. 不一样的“中国速度”,数据可视化交通运输大屏,带你见证中国高铁
  16. 数据分析之信用风险评分卡建立
  17. CG中的几何学——坐标系【2】
  18. python ppt转图片_ppt一键转图片和pdf
  19. 最长公共子序列变种——带权的最长公共子序列
  20. python库下载超时_Python的请求库超时,但是得到了响应

热门文章

  1. 大学的python选修课好学吗_中国大学MOOC(慕课)_用Python玩转数据_章节考试选修课答案...
  2. 全站 HTTPS 来了
  3. 【案例分享】高效率利器 - SC 频谱分析仪
  4. JVM_常见【面试题】
  5. 如何减少页面的重绘和回流(14)
  6. 是什么使Slider Revolution成为最好的WordPress Slider插件?
  7. 永恒之蓝黑脏牛提权范围
  8. 2018年中小型B2B或B2C网站如何突破?
  9. 基于 PaddleClas 的 SoccerNet 足球 ReID 基线
  10. 机器学习算法[9]--集成方法之XGBoost原理详解及XGBoost库实现