1.这个通过partition实现topk,时间复杂度是o(logn*logn),也就是0(n),但需要修改原数组的顺序

下面这个代码本身有一些错误,并且throw excption会在牛客上报错

  1. class Solution {
  2. public:
  3. vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
  4. vector<int> result;
  5. int length = input.size();
  6. if(input.empty() || length <= || k <= || length < k)
  7. return result;
  8. int start = ;
  9. int end = length - ;
  10. int index = partition(input,length,start,end);
  11. while(index != k-){
  12. if(index > k-){
  13. end = index-;
  14. index = partition(input,length,start,end);
  15. }
  16. else{
  17. start = index + ;
  18. index = partition(input,length,start,end);
  19. }
  20. }
  21. for(int i = ;i <= index;i++)
  22. result.push_back(input[i]);
  23. return result;
  24. }
  25. int partition(vector<int> &input,int length,int start,int end){
  26. if(input.empty() || length <= || start < || end >= length)
  27. throw new exception("Invalid Parameters");
  28. int small = -;
  29. for(int i = start;i <= end;i++){
  30. if(input[i] <= input[end]){
  31. start++;
  32. if(start != i)
  33. swap(&input[start],&input[i]);
  34. }
  35. }
  36. small++;
  37. swap(&input[small],&input[end]);
  38. return small;
  39. }
  40. };

正确代码

  1. class Solution {
  2. public:
  3. vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
  4. vector<int> result;
  5. int length = input.size();
  6. if(input.empty() || length <= || k <= || length < k)
  7. return result;
  8. int start = ;
  9. int end = length - ;
  10. int index = partition(input,start,end);
  11. while(index != k-){
  12. if(index > k-){
  13. end = index - ;
  14. index = partition(input,start,end);
  15. }
  16. else{
  17. start = index + ;
  18. index = partition(input,start,end);
  19. }
  20. }
  21. for(int i = ;i < k;i++)
  22. result.push_back(input[i]);
  23. return result;
  24. }
  25. int partition(vector<int> &input,int start,int end){
  26. int small = start - ;
  27. for(int i = start;i < end;i++){
  28. if(input[i] < input[end]){
  29. small++;
  30. if(small != i)
  31. swap(input,small,i);
  32. }
  33. }
  34. small++;
  35. swap(input,small,end);
  36. return small;
  37. }
  38. void swap(vector<int>& input,int a,int b){
  39. int tmp = input[a];
  40. input[a] = input[b];
  41. input[b] = tmp;
  42. }
  43. };

2.用大根堆的做法的时间复杂度是o(nlogk)

topk两种解法的更多相关文章

  1. Java描述表达式求值的两种解法:双栈结构和二叉树

    Java描述表达式求值的两种解法:双栈结构和二叉树 原题大意:表达式求值 求一个非负整数四则混合运算且含嵌套括号表达式的值.如: # 输入: 1+2*(6/2)-4 # 输出: 3.0 数据保证: 保 ...

  2. 51nod 1165 整边直角三角形的数量(两种解法)

    链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1165 直角三角形,三条边的长度都是整数.给出周长N,求符合条件的三角形数量. ...

  3. Letter Combinations of a Phone Number:深度优先和广度优先两种解法

    Letter Combinations of a Phone Number Given a digit string, return all possible letter combinations ...

  4. 【Java面试真题】剑指Offer53.2——0~n-1中缺失的数字(异或、二分两种解法)

    [Java实现]剑指Offer53.2--0~n-1中缺失的数字:面试真题,两种思路分享 前面有另一道面试题[Java实现]剑指offer53.1--在排序数组中查找数字(LeetCode34:在排序 ...

  5. leetcode-91-解码方法(动态规划和递归两种解法)

    题目描述: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数 ...

  6. POJ 1157 LITTLE SHOP OF FLOWERS (超级经典dp,两种解法)

    You want to arrange the window of your flower shop in a most pleasant way. You have F bunches of flo ...

  7. Sort List[leetcode] 由归并排序的递归和循环,到本题的两种解法

    归并排序能够有两种思路----top-down 和 bottom-up top-down: 递归实现,将数组分成两半.分别处理.再合并. 伪代码例如以下: split ( A[], l, r) { i ...

  8. POJ 1182食物链(分集合以及加权两种解法) 种类并查集的经典

    题目链接:http://icpc.njust.edu.cn/Problem/Pku/1182/ 题意:给出动物之间的关系,有几种询问方式,问是真话还是假话. 定义三种偏移关系: x->y 偏移量 ...

  9. [LeetCode] Validate Binary Search Tree (两种解法)

    Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...

随机推荐

  1. golang 的md5加密

    先看实现代码: package main import (     "crypto/md5"     "encoding/hex"     "fmt& ...

  2. 简单工厂模式使用ResourceBundle读取.properties配置文件

    在做项目时,遇到需要创建DAO.Service等类的实例的时候,想到用工厂方法来运作,而简单工厂方法又有明显的缺点: ①由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中 ...

  3. CSS,js,html

    图片盗链问题使用以下meta标签解决 <meta name="referrer" content="never"> Chrome 中文界面下默认会将 ...

  4. 【Codeforces】Helvetic Coding Contest 2017 online mirror比赛记

    第一次打ACM赛制的团队赛,感觉还行: 好吧主要是切水题: 开场先挑着做五道EASY,他们分给我D题,woc什么玩意,还泊松分布,我连题都读不懂好吗! 果断弃掉了,换了M和J,然后切掉了,看N题: l ...

  5. <Android 应用 之路> MPAndroidChart~ScatterChart

    简介 MPAndroidChart是PhilJay大神给Android开发者带来的福利.MPAndroidChart是一个功能强大并且使用灵活的图表开源库,支持Android和IOS两种,这里我们暂时 ...

  6. IOS CALayer的属性和使用

    一.CALayer的常用属性 1.@propertyCGPoint position; 图层中心点的位置,类似与UIView的center:用来设置CALayer在父层中的位置:以父层的左上角为原点( ...

  7. [译] Z-variant (Z变体)

    阅读目录 1. Z轴上的区别 2. 问题 Unihan 的 kZVariant 字段 译自: en.wikipedia.org/wiki/Z-variant | 已发布zh.wiki 在Unicode ...

  8. 4 使用Selenium模拟登录csdn,取出cookie信息,再用requests.session访问个人中心(保持登录状态)

    代码: # -*- coding: utf-8 -*- """ Created on Fri Jul 13 16:13:52 2018 @author: a " ...

  9. flask请求流程

  10. Non-resolvable parent POM for com.*******

    场景: 同事新打了一个jar包到私服里面,自己删除了本地对应的中央仓库的依赖包,再次重新下载.  于是我又打开了一个idea的窗口重新引入这个项目,然后重新下载依赖的服务. 结果就一直报这个问题... ...