全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++实现的O(n)复杂度内查找第K大数算法示例

本文实例讲述了C++实现的O(n)复杂度内查找第K大数算法。分享给大家供大家参考,具体如下:

题目:是在一组数组(数组元素为整数,可正可负可为0)中查找乘积最大的三个数,最后输出最大乘积。

从题目我们知道只有两种结果存在:
1)三个最大的正整数相乘;
2)一个最大的正整数和两个最小的负数相乘。

所以我们需要找出数组中最大的三个数的乘积m,然后与数组中最小的两个数相乘再与最大的数相乘的结果n,然后比较m,n,选出最大的数即为最终的结果。

参考代码:https://www./article/121189.htm

实现代码:

#include <iostream>
#include <algorithm>
//分区
int partition(std::vector<int>&vec,int start,int end) {
 int value=vec[end];
 int tail=start-1;
 for(int i=start;i<end;++i){
  if(vec[i]<value){
   tail++;
   std::swap(vec[i],vec[tail]);
  }
 }
 tail++;
 std::swap(vec[tail],vec[end]);
 return tail;
}
long long solve(std::vector<int>&vec,int start,int end,int k) {
 //快排思想,进行分区,快排复杂度为O(nlgn),但取最值只比较分区的一个区间,所以为O(n)
 int now = partition(vec,start,end);
 if(k < now)
  return solve(vec,start,now-1,k);
 else if(k > now)
  return solve(vec,now+1,end,k);
 else
  return vec[now];
}
int main() {
 int n;//要比较的数的个数
 while(std::cin>>n) {
  std::vector<int> vec_i(n,0);//使用vector存储n个数
  for(int i = 0; i < n; ++i) {
   std::cin>>vec_i[i];
  }
  int k;
  //最大的数,index为n-1
  k = n - 1;
  long long x1 = solve(vec_i,0, n-1,k);
  //次大的数,index为n-2
  k = n - 2;
  long long x2 = solve(vec_i,0, n-2,k);
  //第三大的数
  k = n - 3;
  long long x3 = solve(vec_i,0, n-3,k);
  long long Ans = x1 * x2 * x3;//最大的三个数的乘积
  if(n > 3) {
   //最小的数,index为0
   k = 0;
   long long y1 = solve(vec_i,0, n-1,k);
   //次小的数,index为1
   k = 1;
   long long y2 = solve(vec_i,0, n-2,k);
   Ans = std::max(Ans, y1*y2*x1);//两者比较取最大
  }
  std::cout<<Ans;
 }
 return 0;
}

希望本文所述对大家C++程序设计有所帮助。


# C++  # O(n)复杂度  # 查找  # 第K大数  # 算法  # C++找出字符串中出现最多的字符和次数  # 时间复杂度小于O(n^2)  # Java算法之时间复杂度和空间复杂度的概念和计算  # 浅谈Java如何实现一个基于LRU时间复杂度为O(1)的缓存  # Python算法中的时间复杂度问题  # 科学知识:时间复杂度计算方法  # php 常用算法和时间复杂度  # PHP 巧用数组降低程序的时间复杂度  # PHP 用数组降低程序的时间复杂度  # 浅谈c++性能测试工具之计算时间复杂度  # 组中  # 是在  # 正整数  # 两种  # 给大家  # 要比  # 可为  # 即为  # 所述  # 程序设计  # 第三大  # 讲述了  # htm  # article  # https  # www  # cpp  # include  # brush  # pre 


相关文章: 网站制作公司广州有几家,广州尚艺美发学校网站是多少?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  如何在局域网内绑定自建网站域名?  如何快速搭建高效服务器建站系统?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  专业公司网站制作公司,用什么语言做企业网站比较好?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  建站主机如何选?高性价比方案全解析  建站DNS解析失败?如何正确配置域名服务器?  ,制作一个手机app网站要多少钱?  网站制作公司排行榜,抖音怎样做个人官方网站  沈阳制作网站公司排名,沈阳装饰协会官方网站?  微信小程序 input输入框控件详解及实例(多种示例)  招贴海报怎么做,什么是海报招贴?  网站制作企业,网站的banner和导航栏是指什么?  如何选择域名并搭建高效网站?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  广东企业建站网站优化与SEO营销核心策略指南  建站主机系统SEO优化与智能配置核心关键词操作指南  建站之星安装后界面空白如何解决?  宝塔建站无法访问?如何排查配置与端口问题?  北京网站制作网页,网站升级改版需要多久?  建站之星在线客服如何快速接入解答?  如何基于云服务器快速搭建网站及云盘系统?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  如何通过智能用户系统一键生成高效建站方案?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  如何在橙子建站中快速调整背景颜色?  如何在阿里云服务器自主搭建网站?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何在万网自助建站平台快速创建网站?  建站主机选购指南:核心配置优化与品牌推荐方案  岳西云建站教程与模板下载_一站式快速建站系统操作指南  Python路径拼接规范_跨平台处理说明【指导】  山东云建站价格为何差异显著?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  Python lxml的etree和ElementTree有什么区别  网站专业制作公司有哪些,做一个公司网站要多少钱?  如何彻底卸载建站之星软件?  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  定制建站流程步骤详解:一站式方案设计与开发指南  建站之星logo尺寸如何设置最合适?  建站168自助建站系统:快速模板定制与SEO优化指南  哈尔滨网站建设策划,哈尔滨电工证查询网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。