时间限制:1S
空间限制:32768K

题目描述:
给定无序整数序列,求第K大的数,例如{45,67,33,21},第2大的数为45

输入描述:
输入第一行为整数序列,数字用空格分割,如:45 67 33 21
输入第二行为一个整数K,K在数组长度范围内,如:2

输出描述:
输出第K大的数,本例为第2大的数:45

示例:
输入
45 67 33 21
2

输出
45

思路:本题数据小直接暴力,求类似的题目可以用快排思想,代码中注释部分为排序求解

#include <iostream>
using namespace std;
const int Maxn = 1005;void swap(int a[Maxn], int l, int r)
{int temp = a[l];a[l] = a[r];a[r] = temp;
}int quickSort(int a[Maxn], int k, int l, int r)
{if(l==r)return a[l];int key = a[l];int left = l, right = r;while(left<right){while(a[right]<key && left<right)right--;if(left<right)swap(a, left, right);while(a[left]>=key && left<right)left++;if(left<right)swap(a, left, right);}a[left] = key;if(left==k)return a[left];else if(left>k)return quickSort(a, k, l, left-1);elsereturn quickSort(a, k, left+1, r);
}int main()
{int a[Maxn], k;int count = 0;while(cin >> a[count++]);cout << quickSort(a, a[count-2]-1, 0, count-3) << endl;return 0;
}
/*
45 67 33 21
2
*///#include <iostream>
//#include <algorithm>
//using namespace std;
//const int Maxn = 1005;
//
//int cmp(const int& a, const int& b)
//{//    return a>b;
//}
//
//int main()
//{//    int a[Maxn], k;
//    int count = 0;
//    while(cin >> a[count++]);
//    sort(a, a+count-2, cmp);
//    cout << a[a[count-2]-1] << endl;
//    return 0;
//}

整数无序数组求第K大数(暴力|快排) - 滴滴出行2018校园招聘内推笔试-研发工程师相关推荐

  1. 整数无序数组求第k大数

    题目来自牛客网 https://www.nowcoder.com/practice/097ab63cffa847d89716f2ca8c23524f?tpId=90&tqId=30914&am ...

  2. 无序数组求第k大的数 python_整数无序数组求第K大数

    import java.util.Scanner; /** * 类似与求第k小的问题 * 求第k大相当于求第n-k+1小,n为数组长度 * * 著名的BFPRT算法可保证在线性时间内得到结果. * h ...

  3. 无序数组求第K大/第K小的数

    方法一:quicksort 根据快排思想,从后往前找比基准数小的,交换位置. 从前往后找比基准数大的,交换位置. 最后安放基准数. 保证 l到p 是大数,若 p-l+1==k 那么p就是第K大 若 p ...

  4. 无序数组求第k大的数 python_【python刷题】寻找数组中第K大/小的数

    使用堆 import heapq def findKthLargest(nums, k): stack = [] for num in nums: heapq.heappush(stack, num) ...

  5. 线性时间复杂度求数组中第K大数

    求数组中第K大的数可以基于快排序思想,步骤如下: 1.随机选择一个支点 2.将比支点大的数,放到数组左边:将比支点小的数放到数组右边:将支点放到中间(属于左部分) 3.设左部分的长度为L, 当K &l ...

  6. 单峰数组求第k大算法

    单峰数组实际上可以看成两个有序的数组,这个问题就转变成了两个有序数组求第k大. 容易想到的算法是对这两个数组进行归并,生成一个新的有序数组,求出第k大之后就可以立刻停止,复杂度是O(k)的. 但是还有 ...

  7. c语言寻找大富翁,PTA 7-38 寻找大富翁(25 分)解法(C/C++)暴力快排/精准堆排 解法...

    7-38 寻找大富翁 (25分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首 ...

  8. 2018迅雷校园招聘客户端在线笔试B卷---输入一个有符号整数,输出该整数的反转值。

    2018迅雷校园招聘客户端在线笔试B卷-输入一个有符号整数,输出该整数的反转值. 题目描述: 输入一个有符号整数,输出该整数的反转值. 代码如下: num = list(input()) if num ...

  9. 求无序数组的第K(大/小)数的三种方法

    题目描述:给定一个无序数组(长度为n)和一个正整数 K,让你求此数组中第K大的数 方法1:最简单的思路,你肯定会想到 先把数组排序,然后再取下标为K的对应数组元素.这种方法肯定是可行的,但是这种方法无 ...

最新文章

  1. C++入门教程,全套C++基础教程(已更新完毕)
  2. 正则表达式(RegularExpression)
  3. Android开发之将AndroidX项目改为非androidX(android.v7.support)的方法
  4. javascript学习系列(6):数组中的pop等方法
  5. java pdf验签_java pdf验签
  6. 将MfgTool工具改造为自己的烧写工具
  7. 8086微型计算机结构功能,3.2 8086微处理器的功能结构
  8. Volley源码解析(三)
  9. 最强半自动化抓鸡工具打造思路
  10. 计算机xp怎么做备份,怎么备份电脑系统?XP环境使用Ghost备份操作系统的步骤
  11. 协议学习之 vamei博客系列 总结
  12. 一点Scala学习资源
  13. FigDraw 20. SCI文章中绘图之马赛克图 (mosaic)
  14. 人生忠告:给男人和女人(ZT)
  15. PKCS1_SignatureScheme_PSS
  16. 主线程 如何控制 子线程
  17. Ruoyi-Vue若依前后端分离版 2022年5月 基于代码生成器的新模块添加
  18. iOS 开发工具整理
  19. Android adb启动错误,使用adb shell启动Android应用程序时出现错误“活动类不存在”...
  20. 《上古天真论》第三讲文字版

热门文章

  1. Vue中的的坑(二)——组件的包裹:div
  2. OW-ORF(最优权重一类随机森林)
  3. 2015美团网面试经验分享
  4. JVM详解之:运行时常量池
  5. 字体大宝库:10款有趣的精美节日字体下载
  6. 2022化工自动化控制仪表特种作业证考试题库模拟考试平台操作
  7. 酷睿 i5 12600KF参数 功耗 i512600kf有核显吗
  8. 独立键盘控制风火轮c语言,单片机项目教程--C语言版(十二五)(高职高专)...
  9. UVa 1586 -- Molar mass
  10. 【JZOJ5793】小S练跑步【BFS】