存在重复元素 II

题意:

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 ij ,满足 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^9
  • 0 <= k <= 10^5

题目来源https://leetcode.cn/problems/contains-duplicate-ii/description/

解题方法:

一:暴力循环,运行会超出时间限制(不可取)

php 复制代码
    /**
 * @param Integer[] $nums
 * @param Integer $k
 * @return Boolean
 */
//超出时间限制
function containsNearbyDuplicate($nums, $k) {
    for($i = 0; $i < count($nums); $i++){
        for($j = $i + 1; $j < count($nums); $j++){
            if($nums[$i] == $nums[$j] && (abs($i-$j) <= $k)){
                return true;
            }
        }
    }
    return false;
}

方法二:解题思路 >>>> 类似hash,开辟一个临时数组,存储不重复的val,当有临时数组中存在该val时,做相关判断,如果符合条件,直接返回,如果不符合,则将该val的key替换为最新key

php 复制代码
function containsNearbyDuplicate($nums, $k) {
    $temp = [];
    foreach($nums as $key => $value){
        if(isset($temp[$value]) && abs($key - $temp[$value]) <= $k){
            return true;
        }
        $temp[$value] = $key;
    }
    return false;
}

$nums =[1,2,3,1,2,3]; $k =2; 为例
前三个为123,当轮到第4元素(第二次出现的1时),此时的索引差值不满足小于2的条件,已经不可能再有比这个小的差值了,所以替换到最新的位置

参考:

作者:xiaoxie

链接:https://leetcode.cn/problems/contains-duplicate-ii/solutions/1059994/phpjie-ti-by-xiaoxie-w-yaum/

来源:力扣(LeetCode)

相关推荐
近津薪荼14 分钟前
优选算法——双指针4(单调性)
c++·学习·算法
郝学胜-神的一滴14 分钟前
Linux Socket编程核心:深入解析sockaddr数据结构族
linux·服务器·c语言·网络·数据结构·c++·架构
IUGEI1 小时前
从原理到落地:DAG在大数据SLA中的应用
java·大数据·数据结构·后端·算法
云深麋鹿1 小时前
五.排序笔记
c语言·数据结构·算法·排序算法
spcier7 小时前
图论拓扑排序-Kahn 算法
算法·图论
知星小度S7 小时前
动态规划(一)——思想入门
算法·动态规划
攻城狮凌霄7 小时前
PHP接单涨薪系列(七十一):如何用Neo4j构建借贷关系图谱?解析资金流水时空矩阵揪出“砍头息“和“循环贷“
矩阵·php·neo4j
ysa0510307 小时前
动态规划-逆向
c++·笔记·算法
燃于AC之乐7 小时前
我的算法修炼之路--7—— 手撕多重背包、贪心+差分,DFS,从数学建模到路径DP
c++·算法·数学建模·深度优先·动态规划(多重背包)·贪心 + 差分
Whisper_Sy7 小时前
Flutter for OpenHarmony移动数据使用监管助手App实战 - 网络状态实现
android·java·开发语言·javascript·网络·flutter·php