Array - 219. Contains Duplicate II
时间:2022-07-25
本文章向大家介绍Array - 219. Contains Duplicate II,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
219、Contains Duplicate II
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
思路:
这题是217题的变形,多加了在k范围内重复才返回true,思路也是使用map来做,遍历的同时查重,时间复杂度O(N),空间复杂度为O(N),使用滑动窗口的思想可以优化空间复杂度为O(K)。
代码:
java:
class Solution {
// solution 1 hashmap. time: O(n) space: O(n)
/*public boolean containsNearbyDuplicate(int[] nums, int k) {
if (nums == null || nums.length == 0) return false;
HashMap<Integer, Integer> map = new HashMap();
for (int i = 0; i < nums.length; i++) {
Integer index = map.get(nums[i]);
if (index != null && i-index <= k){
return true;
}
map.put(nums[i], i);
}
return false;
}*/
// solution 2 Sliding Window. time: O(n) space: O(k)
public boolean containsNearbyDuplicate(int[] nums, int k) {
if (nums == null || nums.length == 0) return false;
HashSet<Integer> set = new HashSet();
for (int i = 0; i < nums.length; i++) {
if (!set.add(nums[i])) {
return true;
}
// 更新set,保证大小不超过k
if (i >= k) {
set.remove(nums[i - k]);
}
}
return false;
}
} // best case
go:
/*func containsNearbyDuplicate(nums []int, k int) bool {
if nums == nil || len(nums) == 0 { return false }
var (
maps = make(map[int]int)
window = make([]int, 0)
)
for i, v := range nums {
if _, ok := maps[v]; ok{
return true
} else {
maps[v] = i
window = append(window, v)
}
// update map size if we have more than k
if (i >= k) {
delete(maps, window[0])
window = window[1:]
}
}
return false
}
//bad case */
func containsNearbyDuplicate(nums []int, k int) bool {
exist := make(map[int]int, len(nums))
for i, v := range nums{
if pos, ok := exist[v]; ok && i - pos <= k{
return true
}
exist[v] = i
}
return false
}```
- 区块链与数字货币是什么关系呢?
- 保存数据到MySql数据库——我用scrapy写爬虫(二)
- 人工智能将取代人类?危机亦或是新的机遇
- 大数据驱动的未来网络:体系架构与应用场景(下)网络架构与场景详解
- 冷静点,NVIDIA 禁止 Geforce 进数据中心想限制的并不是深度学习
- 智能机器人崛起背后的中国力量
- 企业微服务架构转型-实施步骤
- Andrew Ng机器学习课程笔记--week2(多元线性回归&正规公式)
- 科技第六感:黑客控制你的车!不信?其实很简单
- python多版本的pip共存问题解决办法
- C++ 对vector进行排序
- 小程序优化36计
- 神经网络权重初始化问题
- Andrew Ng机器学习课程笔记--week11(图像识别&总结划重点)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 大点干!早点散----------rsync+inotify实现远程实时同步
- 听说MongoDB你很豪横?-------------MongoDB数据库基础详解
- 听说MongoDB你很豪横?-------------MongoDB 部署分片群集以及管理分片
- SAP Spartacus和product相关的标准normalizer
- 【Rust 日报】2020-09-09 引入“auditable”
- 听说MongoDB你很豪横?-------------MongoDB复制集以及管理优化
- 听说Memcache你很豪横?-------------深入剖析Memcache 安装及管理数据库操作
- 听说Memcache你很豪横?-------------深入剖析Memcache+keepalive高可用群集
- 排障集锦:九九八十一难之第十四难!------------- 安装magent时make编译报错
- 【Rust日报】2020-09-06 Evil_DLL 用来测试注入方法的DLL
- 【Rust日报】2020-09-05 微软在c++静态分析工具实现了一些rust的安全规则
- 一起来玩玩WebGL
- 自研网关:多项目的swagger聚合功能
- Prometheus 如何做到“活学活用”,大牛总结的避坑指南
- 文档驱动 —— 表单组件(一):表单元素组件 优点缺点选择文本类的Inputcheck 多选value的类型问题