• 快排解决TopK问题 C++实现


    面试中遇到的问题,挺有意思的记录一下。

    C++版本

    // 快排变形.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int partion(vector<int>& nums,int left, int right)
    {
        int key = nums[left];
        while (left < right)
        {
            while (left < right && nums[right] >= key) right--;
            nums[left] = nums[right];
            while (left < right && nums[left] <= key) left++;
            nums[right] = nums[left];
        }
        nums[left] = key;
        return left;
    }
    
    int topK(vector<int>& nums, int low, int high, int k)
    {
        if (low == high) return nums[low];
        int pos = partion(nums, low, high);
    
        int len = high - pos + 1;
        if (len == k) return nums[pos];
        else if (len > k) return topK(nums, pos+1, high, k);
        else return topK(nums, low, pos -1, k-len);
    }
    
    
    int main()
    {
        vector<int> nums = { 12,52,1,59,46,49,65,58,15,34,28,9,5 };
        int n = nums.size();
        cout << topK(nums, 0, n - 1, 3);
    }
  • 相关阅读:
    排序
    Apache架设Web服务器
    函数调用规范
    linux启动流程
    Make工程管理器
    网络相关知识
    数字电路中的建立时间与保持时间
    面试碰到的技术题
    嵌入式linux的驱动程序
    EF实体中的修改
  • 原文地址:https://www.cnblogs.com/BillowJ/p/14591106.html
Copyright © 2020-2023  润新知