快速排序

描述

著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。 给定划分后的 N 个互不相同的正整数的排列,请问有多少个元素可能是划分前选取的主元?

例如给定 N = 5 , 排列是1、3、2、4、5。则:

1.1 的左边没有元素,右边的元素都比它大,所以它可能是主元;

2.尽管 3 的左边元素都比它小,但其右边的 2 比它小,所以它不能是主元;

3.尽管 2 的右边元素都比它大,但其左边的 3 比它大,所以它不能是主元;

4.类似原因,4 和 5 都可能是主元。

因此,有 3 个元素可能是主元。

输入

输入在第 1 行中给出一个正整数 N(≤10^5); 第 2 行是空格分隔的 N 个不同的正整数,每个数不超过 10^9。

输出

在第 1 行中输出有可能是主元的元素个数;在第 2 行中按递增顺序输出这些元素,其间以 1 个空格分隔,行首尾不得有多余空格。

样例输入
5 1 3 2 4 5
样例输出
3 1 4 5

code1(wrong)

我一开始的代码是判断nums[i]左边是否存在大于nums[i]的数字,有就break,

右边同理nums[i]右边是否存在小于nums[i]的数字,有就break,但这样就会超时,因为N(≤10^5), else if(!pd_left(nums,i)&&!pd_right(nums,i)) result.push_back(nums[i]);这句代码复度为O(n*n)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool pd_right(vector<int>&nums,const int j){int min_num=nums[j];bool flag1=false;for(int i=j+1;i<nums.size();i++){min_num=min(min_num,nums[i]);if(min_num<nums[j]){flag1=true;break;} }return flag1;
}
bool pd_left(vector<int>&nums,const int j){bool flag2=false;int max_num=nums[j];for(int i=j-1;i>=0;i--){max_num=max(max_num,nums[i]);if(max_num>nums[j]){flag2=true;break;}}return flag2;
}
int main()
{int n;while(cin>>n){//vector<int> nums(n);vector<int> nums;for(int i=0;i<n;i++){int num;cin>>num;nums.push_back(num);}vector<int>result;for(int i=0;i<nums.size();i++){if(i==0&&(!pd_right(nums,i))) result.push_back(nums[i]);else if(!pd_left(nums,i)&&!pd_right(nums,i)) result.push_back(nums[i]);else if(i==nums.size()-1&&(!pd_left(nums,i))) result.push_back(nums[i]);//O(n*n)}sort(result.begin(),result.end());        cout<<result.size()<<endl;if(result.size()>0){for(int i=0;i<result.size()-1;i++) cout<<result[i]<<' ';cout<<result[result.size()-1];}cout<<endl;}return 0;
}

code2(AC版)

用到动态规划,使复杂度变为O(n),使用两个数组maxLeft和minRight来保存每个元素的左边的最大值和右边的最小值。通过一次遍历,分别计算出每个元素的左边的最大值和右边的最小值,然后再进行一次遍历判断每个元素是否是主元

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{int n;while(cin>>n){vector<int>maxleft(n);vector<int>minright(n);vector<int>nums(n);for(int i=0;i<n;i++){//int num;cin>>nums[i];//nums.push_back(num);}maxleft[0]=nums[0];for(int i=1;i<n;i++){maxleft[i]=max(maxleft[i-1],nums[i]);}minright[n-1]=nums[n-1];for(int i=n-2;i>=0;i--){minright[i]=min(minright[i+1],nums[i]);}vector<int>result;for(int i=0;i<n;i++){if(nums[i]>=maxleft[i]&&nums[i]<=minright[i]){result.push_back(nums[i]);}}sort(result.begin(),result.end());cout<<result.size()<<endl;if(result.size()>0){for(int i=0;i<result.size()-1;i++) cout<<result[i]<<' ';if(result.size()>0) cout<<result[result.size()-1];}cout<<endl;return 0;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink系列之:Upsert Kafka SQL 连接器

Flink系列之&#xff1a;Upsert Kafka SQL 连接器 一、Upsert Kafka SQL 连接器二、依赖三、完整示例四、可用元数据五、键和值格式六、主键约束七、一致性保证八、为每个分区生成相应的watermark九、数据类型映射 一、Upsert Kafka SQL 连接器 Scan Source: Unbounded 、Sink…

2023年中国数据智能管理峰会(DAMS上海站2023)-核心PPT资料下载

一、峰会简介 数据已经成为企业的核心竞争力&#xff01;谁掌控数据、更好的利用数据、实现资产化&#xff0c;谁就会真正率先进入大数据时代。 1、数据智能管理趋势和挑战 在峰会上&#xff0c;与会者讨论了数据智能管理的最新趋势和挑战。随着数据量的不断增加&#xff0c…

JNI逆向

IDA&#xff1a;JNI类型转换 1.IDA高版本&#xff08;IDA 高版本内置了定义的JNI结构体; 如果没有的话&#xff0c;在Views->Open subviews -> Type Libraries 中添加Android ARM的lib即可&#xff09; 解决方法: 只需要对JNIEnv 指针&#xff08;JNIEnv * &#xff09…

【影像组学入门百问】#32—#34

#32-影像组学研究过程中&#xff0c;图像重采样参 数怎么选择&#xff1f; 在影像组学研究过程中&#xff0c;选择合适的图像重采样参数对于保证分析质量和准确性至关重要。以下是在选择图像重采样参数时需要考虑的一些建议&#xff1a; 1.目标分辨率&#xff1a;首先&#…

力扣 | 347. 前 K 个高频元素

leetcode 347 号算法题&#xff1a;前 K 个高频元素 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。 你可以按 任意顺序 返回答案。输入: nums [1,1,1,2,2,3], k 2 输出: [2, 1]输入: nums [1], k 1 输出: [1]1 < nums.length &…

使用postman时,报错SSL Error: Unable to verify the first certificate

开发中使用postman调用接口&#xff0c;出现以下问题&#xff0c;在确认路径、参数、请求方式均为正确的情况下 解决方法 File - Settings -> SSL certification verification 关闭 找到图中配置&#xff0c;这里默认是打开状态&#xff0c;把它关闭即可&#xff1a;ON …

虾皮测评选品:如何在虾皮平台上进行有效的产品测评和选品

在如今的电商市场中&#xff0c;虾皮&#xff08;Shopee&#xff09;平台已经成为了卖家们最为重要的销售渠道之一。而在虾皮平台上进行产品测评和选品对于卖家来说至关重要&#xff0c;它直接影响到店铺的销售额和利润。本文将为您提供一些关于如何在虾皮平台上进行有效的产品…

如何通过ETLCloud的API对接功能实现各种SaaS平台数据对接

前言 当前使用SaaS系统的企业越来越多&#xff0c;当我们需要对SaaS系统中产生的数据进行分析和对接时就需要与SaaS系统提供的API进行对接&#xff0c;因为SaaS一般是不会提供数据库表给企业&#xff0c;这时就应该使用ETL&#xff08;Extract, Transform, Load&#xff09;的…

Tenda账号密码泄露漏洞复现 [附POC]

文章目录 Tenda账号密码泄露漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现Tenda账号密码泄露漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息…

复杂 SQL 实现分组分情况分页查询

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、根据 camp_status 字段分为 6 种情况 1.1 SQL语句 1.2 SQL解释 二、分页 SQL 实现 2.1 SQL语句 2.2 根据 camp_type 区分返…

Unity中Shader测试常用的UGUI功能简介

文章目录 前言一、锚点1、锚点快捷修改位置2、使用Anchor Presets快捷修改3、Anchor Presets界面按下 Shift 可以快捷修改锚点和中心点位置4、Anchor Presets界面按下 Alt 可以快捷修改锚点位置、UI对象位置 和 长宽大小 二、Canvas画布1、UGUI中 Transform 变成了 Rect Transf…

openssl数据压缩

介绍 数据压缩是将原有数据通过某种压缩算法计算得到相对数据量小的过程。这种过程是可逆的&#xff0c;即能通过压缩后的数据恢复出原数据。数据压缩能够节省存储空间&#xff0c;减轻网络负载。 在即需要加密又需要压缩的情况下&#xff0c;必须先压缩再加密&#xff0c;次…

Linux 操作系统(查看文件内容)

cat 格式&#xff1a;cat [选项]...[文件]... 说明&#xff1a;把多个文件连接后输出到标准输出&#xff08;屏幕&#xff09;或者加”> 文件名” 输出到另一个文件中 常用选项&#xff1a; -b或—number-noblank: 从1开始对所有非空输出行进行编号 -n或—number: 从1开始所…

网络协议小记

一、TCP/IP协议 作为一个小萌新&#xff0c;当然我无法将tcp/ip协议的大部分江山和盘托出&#xff0c;但是其中很多面试可能问到的知识&#xff0c;我觉得有必要总结一下&#xff01; 首先&#xff0c;在学习tcp/ip协议之前&#xff0c;我们必须搞明白什么是tcp/ip协议。 1、…

6. 3 lambda表达式

6.3 lambda表达式 指定时间间隔完成工作&#xff0c;该工作放在了ActionListener中的action performed 方法中&#xff1b;work类继承上述类&#xff0c;构造work类实例 定制比较器完成排序&#xff0c;定义一个长度比较类&#xff0c;再传给sort&#xff1b;实现基于长度排…

Web地图开发,在vue3中引入高德地图API

在vue3中引入高德地图API要实现的功能 设置地图的显示样式实现点击地图添加标记、点击地图获取详细地址和经纬度输入框搜索获取相关地区提示&#xff08;下拉框&#xff0c;选中后进行标记&#xff0c;视角移动到相对位置&#xff09;输入框输入内容&#xff0c;回车获取详细地…

架构设计系列之前端架构和后端架构的区别和联系

前端架构和后端架构都是软件系统中最关键的架构层&#xff0c;负责处理不同方面的任务和逻辑&#xff0c;两者之间是存在一些区别和联系的&#xff0c;我会从以下几个方面来阐述&#xff1a; 一、定位和职责 前端架构 主要关注用户界面和用户体验&#xff0c;负责处理用户与…

打造中国人自己的GPTs,百度灵境矩阵升级为智能体平台

12月18日&#xff0c;百度「灵境矩阵」平台全新升级为「文心大模型智能体平台」。灵境矩阵基于文心大模型&#xff0c;为开发者提供多样化的开发方式&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取多样化的开发方式&#xff0c;打造大模型时代的原生应…

关于我对归纳偏置(inductive bias)的概念和应用的详细总结

归纳偏置&#xff08;inductive bias&#xff09; 1.归纳偏置&#xff08;inductive bias&#xff09;的概念2.归纳偏置&#xff08;inductive bias&#xff09;的应用 1.归纳偏置&#xff08;inductive bias&#xff09;的概念 归纳偏置&#xff08;inductive bias&#xff0…

贪吃蛇(二)绘制地图

绘制地图主要是考察基础的循环和分支控制&#xff0c;视频没看完&#xff0c;自己写了一下。 绘制一个基础地图 #include"curses.h" void cursesinit() {initscr();keypad(stdscr,1); }void mapinit() {int row;int col;for(row 0;row < 20;row){if(row 0 || …