📅  最后修改于: 2023-12-03 14:50:20.790000             🧑  作者: Mango
本题要求在一个长度为n的数组中删除给定的元素后,返回k个最小的数字。
可以通过先删除给定元素,再排序的方式解决此题。具体步骤如下:
C++代码实现如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> findKMinNums(vector<int>& nums, int k, int target){
int n = nums.size();
vector<int> res;
for(int i=0; i<n; i++){
if(nums[i] == target){
nums.erase(nums.begin()+i);
n--;
i--;
}
}
sort(nums.begin(), nums.end());
for(int i=0; i<k; i++){
res.push_back(nums[i]);
}
return res;
}
int main(){
vector<int> nums = {5, 2, 6, 3, 2, 7, 2, 1};
int target = 2;
int k = 3;
vector<int> res = findKMinNums(nums, k, target);
cout << "The k smallest numbers after deleting " << target << " in the given array are: ";
for(int i=0; i<k; i++){
cout << res[i] << " ";
}
return 0;
}
时间复杂度:$O(nlogn)$,其中n为数组长度,主要时间消耗在数组排序上。
空间复杂度:$O(n)$,需要另外开辟一个数组空间用来存储删除目标元素后的数组。