- 题目:
给你一个下标从 0 开始的整数数组 nums 和两个整数 key 和 k 。K 近邻下标 是 nums 中的一个下标 i ,并满足至少存在一个下标 j 使得 |i - j| <= k 且 nums[j] == key 。
以列表形式返回按 递增顺序 排序的所有 K 近邻下标。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-all-k-distant-indices-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题思路: |i - j| <= k 首先对这个条件进行处理,求出i 在 j 两边的取值范围,然后依次把i加入数组,这时要注意i的起点和终点的取值问题,要把重复的i想办法去掉。
3. 解题代码:
class Solution {
public:
vector<int> findKDistantIndices(vector<int>& nums, int key, int k) {
vector<int> res;
int len = nums.size();
int i = 0,j = 0;
int left = 0;
int right = -1;
for(j ; j < len; j++){
//先找到第一个nums[j] = key
if(nums[j] == key){
left = (j-k > right ? j-k : right+1);
right = (j+k < len ? j+k : len-1);
//
for(i = left ; i <= right; i++){
res.emplace_back(i);
}
}
}
//sort(res.begin(),res.end());
return res;
}
};
- tips:这道题的解法也可以归纳于双指针法。