📜  删除给定元素后找到k个最小的数字(1)

📅  最后修改于: 2023-12-03 14:50:20.790000             🧑  作者: Mango

删除给定元素后找到k个最小的数字

本题要求在一个长度为n的数组中删除给定的元素后,返回k个最小的数字。

解题思路

可以通过先删除给定元素,再排序的方式解决此题。具体步骤如下:

  1. 遍历数组,将给定元素删除
  2. 对数组进行排序
  3. 返回前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)$,需要另外开辟一个数组空间用来存储删除目标元素后的数组。