LeetCode219题:Contains Duplicate II

本文介绍了一种算法,用于在给定数组中查找是否存在两个相等的元素,且它们之间的索引差的绝对值不大于给定的整数k。算法通过遍历数组并检查在当前元素索引加k范围内的元素是否相等来实现这一目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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,寻找该数组是否有两个相等的数,且这两个数之间间隔的数字个数小于k个,即nums[i]==nums[j],且i与j之差的绝对值不大于k。

问题分析:

两数相等,且两个数之间间隔数字个数少于k个,等价于,对给定的第i个数字,在偏移量i+k的范围内,是否能够找到一个数其数值等于第i个数,当i从零一直到数组的末尾(即遍历完整个数组)都没找到,则不存在,如对于任意有效的i,在i+k的范围内,能够找到相等的数,就是存在。


bool containsNearbyDuplicate(int* nums, int numsSize, int k) {
    int currentPosition;
    int point;
    //遍历数组每轮确定一个位置上面的数是否满足要求
    for(currentPosition = 0;currentPosition<numsSize;currentPosition++){
        // 注意这里循环条件,首先要在有效范围之内,其次偏移量不可以超出数组长度
        for(point = currentPosition+1;point-currentPosition<=k && point<numsSize;point++){
            // 如果任意位置有符合条件的数据
            if(nums[currentPosition]==nums[point]){
                return 1;
            }
        }
    }
    return 0;//如果一直没有符合条件的数则返回零
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值