当前位置: 首页 > news >正文

织梦网站怎么做伪静态页面响应式网站导航怎么做

织梦网站怎么做伪静态页面,响应式网站导航怎么做,crm软件是干嘛的,河北省住房城乡建设网站【编程】典型题目:寻找数组第K大数(四种方法对比) 文章目录 【编程】典型题目:寻找数组第K大数(四种方法对比)1. 题目2. 题解2.1 方法一:全局排序(粗暴)2.2 方法二&#…

【编程】典型题目:寻找数组第K大数(四种方法对比)

文章目录

  • 【编程】典型题目:寻找数组第K大数(四种方法对比)
    • 1. 题目
    • 2. 题解
      • 2.1 方法一:全局排序(粗暴)
      • 2.2 方法二:局部排序(略粗暴)
      • 2.3 方法三:优先队列(合理)
      • 2.4 方法四:快速排序(完美)

1. 题目

在这里插入图片描述

2. 题解

2.1 方法一:全局排序(粗暴)

使用C++中内置函数sort进行全局排序,再取第K大值:

class Solution {
public:int findKth(vector<int> a, int n, int K) {sort(a.begin(), a.end());return a[n-K];}
};
  • 复杂度:O(n log n)

2.2 方法二:局部排序(略粗暴)

使用冒泡排序的思想,每次将最大的值放在数组尾部,直到第K个:

class Solution {
public:int findKth(vector<int> a, int n, int K) {for(int i=0; i<K; ++i){for(int j=0; j<n-i-1; ++j){if(a[j]>a[j+1]){int temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}return a[n-K];}
};
  • 复杂度:O(nk)

2.3 方法三:优先队列(合理)

小根堆,维护一个大小为k的小根堆:

class Solution {
public:int findKth(vector<int> a, int n, int K) {priority_queue <int, deque<int>, greater<int>> nums; //队首最小,从小到大排序for(int i=0; i<n; ++i){if(i<K){nums.push(a[i]);}else{if(a[i]>nums.top()){nums.pop();nums.push(a[i]);}}}return nums.top();}
};
  • 复杂度:O(n logk)

2.4 方法四:快速排序(完美)

快排思想:通过一趟排序将待排序元素分成独立的两部分,其中一部分记录的元素均比另一部分记录的元素要小,则可分别对这两部分记录继续进行排序,直到整个序列有序为止。具体做法如下:

  • 首先选取基准元素base(首元素,中间元素,最后元素,随机元素等等)。
  • 以基准元素为基准,将小于基准元素的元素放在前面,大于基准元素的放在后面。
  • 然后以基准元素为界限,分为两组数据。
  • 两组元素重复1、2和3步骤,直至比较排序完成。

快排的最坏运行时间为O(n^2),平均运行时间为O(nlogn)。由于跳跃式交换比较,故不稳定(稳定是指:值一样的原始顺序保持不变)。

针对这道题,递归直到 base 右边有k-1个数,停止即可。

class Solution {
public:vector<int> quickSort(vector<int>&nums, int start, int end, int K){if (start >= end) return nums;int base = nums[start];int i = start;int j = end;while (i < j){while (i < j && nums[j] >= base) j--; //从右往左,寻找比base小的数swap(nums[i], nums[j]);while (i < j && nums[i] <= base) i++;swap(nums[i], nums[j]);}if(nums.size()-i<K) //如果base右边的数超过K个,则第K大数肯定在base右边,此时就不需要对base左边的进行排序quickSort(nums, start, i - 1, K);quickSort(nums, i + 1, end, K);return nums;}int findKth(vector<int> a, int n, int K) {quickSort(a, 0, n-1, K);return a[n-K];}
};
  • 时间复杂度:最坏O(n log n),最好O(n)
http://www.yayakq.cn/news/320430/

相关文章:

  • 简述网站开发的三层架构做国外订单用哪个网站
  • 数据库与网站建设wordpress分享到微信朋友圈
  • 青岛建设公司网站wordpress更改内容
  • 做淘宝要用的网站吗vs2017 如何做网站
  • 网站模板 音乐儿童教育网站源码
  • 跨境购网站建设服装设计公司有什么职位
  • 北京如何建设网站中文竖排wordpress
  • 网站首页优化的目的库存管理系统软件哪个好
  • 连云港建设局网站简约型网站
  • 泗水做网站制作书签简单又漂亮
  • 网站备案哪个局管代理公司收费标准
  • 免费数据网站网站背景特效
  • 做网站都需要学什么网站制作的重要性
  • 做网站是什么做网站的应该怎么发广告
  • 金华市建设局网站贾润根进一步加大网站集约化建设力度
  • 开网站要多少钱做水印的网站
  • 网站版面做得好的四川百度推广和seo优化
  • 淄博乐达网站建设电子商务网站开发需要注意问题
  • 类似wordpress的网站网站及邮件系统建设
  • 无锡工厂网站建设女生学计算机哪个专业简单
  • 计算机网站建设与管理是什么意思网页开发用什么语言
  • sns社交网站开发教程网站的二级页面怎么做代码
  • 一起做彩票网站的人网络营销媒体有哪些
  • 怎样与知名网站做友情链接在住房城乡建设部网站上哪里下载规范
  • 建设公司网站需要多少天建设银行金牛支行网站
  • 手表排名哪个网站好手机优化软件哪个好
  • 用猴子做标志起网站名叫什么好广告营销公司
  • 哪些网站可以免费申请域名看电视剧的免费网站
  • 网站建设问题清单古建设工程造价管理协会网站
  • 网站优化策划方案黄骅市美食