LeetCode笔记:219. Contains Duplicate II
2023-03-15 23:23:47 时间
问题:
Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between i and j is at most k.
大意:
给出一个整型数组和一个整型数k,判断数组中是否任何两个不一样的位置i和j,如果 nums[i] = nums[j] ,i和j的距离不大于k。
思路:
这道题看起来简单,不过有很多陷阱,比如如果k = 0,那么无论数组如何都是错的。如果数组中不存在一样的两个数,也是错的。如果数组中存在多个一样的同一个数,只要有最短的两个的距离小于等于k就可以了等等,我把代码缝缝补补后,还是在一个很长数组的测试用例下超时了。。。不过我用的是最直接的方法,看了看如果合理地使用一些数据结构,就会很方便,比如使用set,set集合的特性是里面不会出现两个不一样的数字,那么我们建立一个长度为k的set,用它来扫描整个数组,不断地判断新出现的数据能不能放进去,如果不能放进去,说明存在距离小于等于k的数据是有相等的,否则就可以放进去,当然set中的数据量如果超过k了就要同时把早先放进去的数据拿出来了,如果扫描过后都可以放进去和取出来,说明没找到小于等于k的相等的数,那就错了。
这道题有个地方不一样在于,一般的题目都是碰到什么就返回false,都没有false才返回true。而这道题却是遇到什么则返回true,都没有true,才返回false。
他山之石:
public boolean containsNearbyDuplicate(int[] nums, int k) {
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < nums.length; i++){
if(i > k) set.remove(nums[i-k-1]);
if(!set.add(nums[i])) return true;
}
return false;
}
相关文章
- 从本体论开始说起——运营商关系图谱的构建及应用
- 如何成为一名数据科学家?
- 从未见过的堂兄杀了人,你的DNA是关键证据
- 20个安全可靠的免费数据源,各领域数据任你挑
- 20个安全可靠的免费数据源,各领域数据任你挑
- 阿里云李飞飞:All in Cloud时代,云原生数据库优势明显
- 基于Hadoop生态系统的一高性能数据存储格式CarbonData(性能篇)
- 大数据告诉你:10年漫威,到底有多少角色
- TigerGraph:实时图数据库助力金融风控升级
- Splunk利用Splunk Connected Experiences和Splunk Business Flow 扩大数据访问
- 大数据开发常见的9种数据分析手段
- 以免在景区看人,我爬了5W条全国景点门票数据...
- 【实战解析】基于HBase的大数据存储在京东的应用场景
- 数据科学家告诉你哪些计算机科学书籍是你应该看的
- Kafka作为大数据的核心技术,你了解多少?
- Spring Boot 整合 Redis 实现缓存操作
- 大数据学习必须掌握的五大核心技术有哪些?
- 基于Antlr在Apache Flink中实现监控规则DSL化的探索实践
- 甲骨文再次被Gartner评为分析型数据管理解决方案魔力象限领导者
- 爬取吴亦凡微博102118条转发数据,扒一扒流量的真假