整数无序数组求第K大数(暴力|快排) - 滴滴出行2018校园招聘内推笔试-研发工程师
时间限制: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校园招聘内推笔试-研发工程师相关推荐
- 整数无序数组求第k大数
题目来自牛客网 https://www.nowcoder.com/practice/097ab63cffa847d89716f2ca8c23524f?tpId=90&tqId=30914&am ...
- 无序数组求第k大的数 python_整数无序数组求第K大数
import java.util.Scanner; /** * 类似与求第k小的问题 * 求第k大相当于求第n-k+1小,n为数组长度 * * 著名的BFPRT算法可保证在线性时间内得到结果. * h ...
- 无序数组求第K大/第K小的数
方法一:quicksort 根据快排思想,从后往前找比基准数小的,交换位置. 从前往后找比基准数大的,交换位置. 最后安放基准数. 保证 l到p 是大数,若 p-l+1==k 那么p就是第K大 若 p ...
- 无序数组求第k大的数 python_【python刷题】寻找数组中第K大/小的数
使用堆 import heapq def findKthLargest(nums, k): stack = [] for num in nums: heapq.heappush(stack, num) ...
- 线性时间复杂度求数组中第K大数
求数组中第K大的数可以基于快排序思想,步骤如下: 1.随机选择一个支点 2.将比支点大的数,放到数组左边:将比支点小的数放到数组右边:将支点放到中间(属于左部分) 3.设左部分的长度为L, 当K &l ...
- 单峰数组求第k大算法
单峰数组实际上可以看成两个有序的数组,这个问题就转变成了两个有序数组求第k大. 容易想到的算法是对这两个数组进行归并,生成一个新的有序数组,求出第k大之后就可以立刻停止,复杂度是O(k)的. 但是还有 ...
- c语言寻找大富翁,PTA 7-38 寻找大富翁(25 分)解法(C/C++)暴力快排/精准堆排 解法...
7-38 寻找大富翁 (25分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首 ...
- 2018迅雷校园招聘客户端在线笔试B卷---输入一个有符号整数,输出该整数的反转值。
2018迅雷校园招聘客户端在线笔试B卷-输入一个有符号整数,输出该整数的反转值. 题目描述: 输入一个有符号整数,输出该整数的反转值. 代码如下: num = list(input()) if num ...
- 求无序数组的第K(大/小)数的三种方法
题目描述:给定一个无序数组(长度为n)和一个正整数 K,让你求此数组中第K大的数 方法1:最简单的思路,你肯定会想到 先把数组排序,然后再取下标为K的对应数组元素.这种方法肯定是可行的,但是这种方法无 ...
最新文章
- C++入门教程,全套C++基础教程(已更新完毕)
- 正则表达式(RegularExpression)
- Android开发之将AndroidX项目改为非androidX(android.v7.support)的方法
- javascript学习系列(6):数组中的pop等方法
- java pdf验签_java pdf验签
- 将MfgTool工具改造为自己的烧写工具
- 8086微型计算机结构功能,3.2 8086微处理器的功能结构
- Volley源码解析(三)
- 最强半自动化抓鸡工具打造思路
- 计算机xp怎么做备份,怎么备份电脑系统?XP环境使用Ghost备份操作系统的步骤
- 协议学习之 vamei博客系列 总结
- 一点Scala学习资源
- FigDraw 20. SCI文章中绘图之马赛克图 (mosaic)
- 人生忠告:给男人和女人(ZT)
- PKCS1_SignatureScheme_PSS
- 主线程 如何控制 子线程
- Ruoyi-Vue若依前后端分离版 2022年5月 基于代码生成器的新模块添加
- iOS 开发工具整理
- Android adb启动错误,使用adb shell启动Android应用程序时出现错误“活动类不存在”...
- 《上古天真论》第三讲文字版