【LeetCode】219. Contains Duplicate II 解题报告(Python)
2024-10-19 18:59:25
作者: 负雪明烛
id: fuxuemingzhu
个人博客: http://fuxuemingzhu.cn/
题目地址:https://leetcode.com/problems/contains-duplicate-ii/description/
题目描述
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 absolute difference between i
and j
is at most k
.
Example 1:
Input: nums = [1,2,3,1], k = 3
Output: true
Example 2:
Input: nums = [1,0,1,1], k = 1
Output: true
Example 3:
Input: nums = [1,2,3,1,2,3], k = 2
Output: false
题目大意
在一个数组中是否存在两个数字相等,并且他们的间距最多为k.
解题方法
使用set
想法是用一个set来保存已经出现过的数据,然后只用遍历一次数组,把每个数放到set里,因为步长最多是k,所以,如果i超过k就删除最早放到set里的元素。set添加元素的时候,如果已经包含了该元素,那么add方法会返回false.
class Solution {
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;
}
}
使用字典
更通用的方法是使用一个字典,保存每个数字出现的位置,如果在K以内,说明满足要求的,否则就更新这个位置。
class Solution(object):
def containsNearbyDuplicate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: bool
"""
d = dict()
for i, num in enumerate(nums):
if num in d:
if i - d[num] <= k:
return True
d[num] = i
return False
日期
2017 年 8 月 18 日
2018 年 11 月 24 日 —— 周六快乐
最新文章
- 激活windows7 企业版小记
- os and shutil
- autofac 注入中i遇到的泛型传参问题
- open-flash-chart2
- php对象引用和析构函数的关系
- 支持向量机(SVM)简介
- Linux 的多线程编程的高效开发经验(转)
- 调整ListBox控件的行间距及设置文本格式
- [转载]opencv MSER
- corejava-chap01
- .net软件工程师面试题(参考答案)
- 王立平-- ContentValues , HashTable , HashMap差别
- 基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多
- 【知了堂学习笔记】_String、StringBuffer与StringBuilder的区别
- jsencrypt参数前端加密c#解密
- qt手写输入法资料
- windows知识点2
- Excel根据字符串截取单元格部分内容
- .Net core使用EF Core Migration做数据库升级
- CentOS6开启BBR加速