zoukankan      html  css  js  c++  java
  • 2-剑指offer: 最小的K个数

    题目描述

    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

    代码:

    // 这种topN问题比较常见的是使用堆来解决,最小的k个数就采用最大堆,最大的k个数就采用最小堆.
    // 此外任然可以用快排来解决.
    
    class Solution {
    public:
        int Partition(vector<int> &input, int left, int right) {
            if (left > right)
                return left;
            int key = input[left];
            int i = left;
            int j = right;
            while(i<j) {
                // 从右往左遍历
                while (i < j && input[j] >= key) {
                    j--;
                }
                
                // 交换
                if (i < j) {
                    input[i] = input[j];
                    i++;
                }
                
                // 从左往右遍历
                while(i<j && input[i] <= key) {
                    i++;
                }
                
                // 交换
                if (i<j) {
                    input[j] = input[i];
                    j--;
                }
            }
            input[i] = key;
            return i;
        }
    
        void QuickSort(vector<int> &input, int k, int left, int right) {
            if (left >= right) return;
            int mid = Partition(input, left, right);
            if (mid == k-1) return;
            else if(mid > k-1) QuickSort(input, k, left, mid-1);
            else if (mid < k-1) QuickSort(input, k, mid+1, right);
        } 
        
        vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
            vector<int> res;
            if ((size_t)k > input.size())
                return res;
            else{
                QuickSort(input, k, 0, input.size()-1);
                res.insert(res.end(), input.begin(), input.begin()+k);
            }
            return res;
        }
    };
    

    只是快排是能够解决这个问题的,不过这里对快排进行了一点更改,减小了时间复杂度.

  • 相关阅读:
    H264源码分析(四)
    矩阵在编程中的一个小应用
    android listview 三种适配器设置
    Android SoundPool 的使用以及原理分析
    poj 2728 Desert King(最优比例生成树)
    MySQL 查询结果以百分比显示
    Android Application
    飘逸的python
    CSS教程:div垂直居中的N种方法[转]
    HQL: Hibernate查询语言
  • 原文地址:https://www.cnblogs.com/xl2432/p/10864146.html
Copyright © 2011-2022 走看看