本文实例讲述了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小时内与您取得联系。