题解 | 无序数组中最小的k个数

无序数组中最小的k个数

https://www.nowcoder.com/practice/ec2575fb877d41c9a33d9bab2694ba47

解题思路

这是一个数组处理问题,需要找出数组中最小的 个数,并保持原数组中的相对顺序。

关键点:

  1. 不能直接排序,因为需要保持原数组顺序
  2. 可以使用临时数组存储原数组的副本并排序
  3. 找出第 小的数作为阈值
  4. 遍历原数组,保留小于等于阈值的前 个数

算法步骤:

  1. 复制原数组并排序,找到第 小的数
  2. 遍历原数组,将小于等于阈值的数加入结果数组
  3. 如果结果数组长度不足 ,继续添加等于阈值的数直到达到

代码

class KthNumbers {
public:
    vector<int> findKthNumbers(vector<int>& A, int n, int k) {
        if (k <= 0 || n <= 0) return vector<int>();
        
        // 复制数组并排序
        vector<int> sorted = A;
        sort(sorted.begin(), sorted.end());
        
        // 获取第k小的数
        int kthValue = sorted[k - 1];
        
        // 遍历原数组,保留小于等于kthValue的前k个数
        vector<int> result;
        for (int i = 0; i < n && result.size() < k; i++) {
            if (A[i] <= kthValue) {
                result.push_back(A[i]);
            }
        }
        
        return result;
    }
};
import java.util.*;

public class KthNumbers {
    public int[] findKthNumbers(int[] A, int n, int k) {
        if (k <= 0 || n <= 0) return new int[0];
        
        // 复制数组并排序
        int[] sorted = A.clone();
        Arrays.sort(sorted);
        
        // 获取第k小的数
        int kthValue = sorted[k - 1];
        
        // 遍历原数组,保留小于等于kthValue的前k个数
        int[] result = new int[k];
        int index = 0;
        
        for (int i = 0; i < n && index < k; i++) {
            if (A[i] <= kthValue) {
                result[index++] = A[i];
            }
        }
        
        return result;
    }
}
class KthNumbers:
    def findKthNumbers(self, A, n, k):
        if k <= 0 or n <= 0:
            return []
            
        sorted_arr = sorted(A)
        kth_value = sorted_arr[k - 1]
        
        result = []
        for num in A:
            if len(result) < k and num <= kth_value:
                result.append(num)
                
        return result

算法及复杂度

  • 算法:排序 + 遍历
  • 时间复杂度:,主要来自排序操作
  • 空间复杂度:,需要存储排序后的数组副本
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-19 14:46
和女友两个人马上毕业,现在我在鹅实习995,周六日偶尔也去北京;她在北京金融007,经常忙到后半夜,周末也没啥休息机会两个人现在都不咋聊天了,一句话隔半小时甚至半天才回。&nbsp;她是个很优秀的妹子,工作也很努力,是值得学习一辈子的人。我在努力工作求转正,即便不行至少赚到了一段不错的实习经历。已经异地了半年,接下来可能还会持续是这个状态。我们都算是对方重要的人,只是感觉看上去不是很有未来的样子。希望牛友们给点的鼓励
梦旅奇缘:很难。异地首先就已经很难了,加上妹子是金融行业,忙碌高压,对情感需求很高,而且见惯纸醉金迷,你的很多优势在她那里可能就不算什么了。这种情况下,在她们那里遇到一个能及时照顾她的人,即使那人可能很多条件不如你,你也有可能被分手。 说白了,两个卷王就不太适合在一起。因为卷王最大的优势,在另一个卷王那里就不算优势了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务