2200、找出数组中的所有K近邻下标
题目:
解答:
思路:定位所有key下标位置,遍历以key为中心的,左右长度为k的窗口,判断是否已经添加到ans中,没有则添加
优化:部分下标会重复遍历,因此需要一个变量来存储“已经遍历过的下标”的信息,这样可以减少判断的步骤
边界为[0,len-1],使用min/max调整即可
len==1时,直接return即可,因为题设说明了nums中一定存在key
class Solution {
public:vector<int> findKDistantIndices(vector<int>& nums, int key, int k) {vector<int> ans;int len =nums.size();int curmin = 0;if(len==1){ans.push_back(0);return ans;}for(int i=0;i<len;i++){if(nums[i]==key){int curmax=min(len-1,i+k);curmin = max(curmin,i-k);for(int j=curmin;j<=curmax;j++){ans.push_back(j);}curmin = curmax+1;if(curmin>=len) break;}}return ans;}
};
时间复杂度O(n),n为nums长度
空间复杂度O(n)