力扣第 284 场周赛 :数组中的所有 K 近邻下标

简介: 给你一个下标从 0 开始的整数数组 nums 和两个整数 key 和 k 。

3.png

一、问题描述


给你一个下标从 0 开始的整数数组 nums 和两个整数 keykK 近邻下标nums 中的一个下标 i ,并满足至少存在一个下标 j 使得 |i - j| <= knums[j] == key


以列表形式返回按 递增顺序 排序的所有 K 近邻下标。


题目链接:数组中的所有 K 近邻下标


二、题目要求


样例

输入:nums= [3,4,9,1,3,9,5], key=9, k=1输出: [1,2,3,4,5,6]
解释:因此,nums[2] ==keynums[5] ==key-对下标0|0-2|>k|0-5|>k,所以不存在j使得|0-j|<=knums[j] ==key所以0不是一个K近邻下标。-对下标1|1-2|<=knums[2] ==key,所以1是一个K近邻下标。-对下标2|2-2|<=knums[2] ==key,所以2是一个K近邻下标。-对下标3|3-2|<=knums[2] ==key,所以3是一个K近邻下标。-对下标4|4-5|<=knums[5] ==key,所以4是一个K近邻下标。-对下标5|5-5|<=knums[5] ==key,所以5是一个K近邻下标。-对下标6|6-5|<=knums[5] ==key,所以6是一个K近邻下标。因此,按递增顺序返回 [1,2,3,4,5,6] 


考察

循环判断简单题型
建议用时10~30min


三、问题分析


这一题一开始看题目感觉比较难,但看了案例之后其实就是普通的循环判断。这一题,分两步解决:


1.找出 j

j是什么?对数组nums进行判断,如果nums[j]==key,那么下标j存入v2数组中,留着备用。


2.找出 i

i就是近邻下标,第一重for循环遍历数组nums,第二重for循环是存储j的数组v2。

i和任意v2数组中的元素只要满足:abs(i-v2[j])<=k,那么i存入数组v1。


拓展

abs代表取绝对值。


四、编码实现


classSolution {
public:
vector<int>findKDistantIndices(vector<int>&nums, intkey, intk) {
inti,j,n=nums.size();//初始化定义vector<int>v1,v2;//数组v1 v2for(j=0;j<n;j++)//找出 jif(nums[j]==key)//与key相等v2.push_back(j);
for(i=0;i<n;i++)//找出 i        {
for(j=0;j<v2.size();j++)
            {
if(abs(i-v2[j])<=k)//判断条件                {
v1.push_back(i);
break;//只要有一个满足就退出,不需要完全遍历                }
            }
        }
returnv1;  
    }
};

五、测试结果7.png

相关文章
|
2月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
43 0
|
4月前
|
算法
LeetCode第53题最大子数组和
LeetCode第53题"最大子数组和"的解题方法,利用动态规划思想,通过一次遍历数组,维护到当前元素为止的最大子数组和,有效避免了复杂度更高的暴力解法。
LeetCode第53题最大子数组和
LeetCode------找到所有数组中消失的数字(6)【数组】
这篇文章介绍了LeetCode上的"找到所有数组中消失的数字"问题,提供了一种解法,通过两次遍历来找出所有未在数组中出现的数字:第一次遍历将数组中的每个数字对应位置的值增加数组长度,第二次遍历找出所有未被增加的数字,即缺失的数字。
|
2月前
【LeetCode-每日一题】 删除排序数组中的重复项
【LeetCode-每日一题】 删除排序数组中的重复项
23 4
|
2月前
|
索引
Leetcode第三十三题(搜索旋转排序数组)
这篇文章介绍了解决LeetCode第33题“搜索旋转排序数组”的方法,该问题要求在旋转过的升序数组中找到给定目标值的索引,如果存在则返回索引,否则返回-1,文章提供了一个时间复杂度为O(logn)的二分搜索算法实现。
24 0
Leetcode第三十三题(搜索旋转排序数组)
|
2月前
|
算法 C++
Leetcode第53题(最大子数组和)
这篇文章介绍了LeetCode第53题“最大子数组和”的动态规划解法,提供了详细的状态转移方程和C++代码实现,并讨论了其他算法如贪心、分治、改进动态规划和分块累计法。
70 0
|
2月前
|
C++
【LeetCode 12】349.两个数组的交集
【LeetCode 12】349.两个数组的交集
19 0
|
4月前
|
算法
LeetCode第81题搜索旋转排序数组 II
文章讲解了LeetCode第81题"搜索旋转排序数组 II"的解法,通过二分查找算法并加入去重逻辑来解决在旋转且含有重复元素的数组中搜索特定值的问题。
LeetCode第81题搜索旋转排序数组 II
|
4月前
|
算法 索引
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
|
4月前
|
算法
LeetCode第33题搜索旋转排序数组
这篇文章介绍了LeetCode第33题"搜索旋转排序数组"的解题方法,通过使用二分查找法并根据数组的有序性质调整搜索范围,实现了时间复杂度为O(log n)的高效搜索算法。
LeetCode第33题搜索旋转排序数组