快排——OJ题

在这里插入图片描述


📘北尘_:个人主页

🌎个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》

☀️走在路上,不忘来时的初心

文章目录

  • 一、颜色划分
    • 1、题目讲解
    • 2、算法原理
    • 3、代码实现
  • 二、排序数组
    • 1、题目讲解
    • 2、算法原理
    • 3、代码实现
  • 三、数组中的第K大元素
    • 1、题目讲解
    • 2、算法原理
    • 3、代码实现
  • 四、最小的K个数
    • 1、题目讲解
    • 2、算法原理
    • 3、代码实现


一、颜色划分

1、题目讲解

在这里插入图片描述

2、算法原理

在这里插入图片描述

3、代码实现

class Solution {
public:void sortColors(vector<int>& nums) {int n=nums.size();for(int left=-1,right=n,i=0;i<right;){if(nums[i]==1)  i++;else if(nums[i]==0) swap(nums[++left],nums[i++]);else if(nums[i]==2) swap(nums[--right],nums[i]);}      }
};

二、排序数组

1、题目讲解

在这里插入图片描述

2、算法原理

在这里插入图片描述

3、代码实现

class Solution {
public:vector<int> sortArray(vector<int>& nums) {srand(time(NULL));qsort(nums,0,nums.size()-1);return nums;}void qsort (vector<int>& nums,int l,int r){if(l>=r)    return;int i=l,left=l-1,right=r+1;int key=GetRandom(nums,l,r);while(i<right){if(nums[i]<key)  swap(nums[++left],nums[i++]);else if(nums[i]==key) i++;else swap(nums[--right],nums[i]);}qsort(nums,l,left);qsort(nums,right,r);}int GetRandom(vector<int>& nums,int l,int r){int p=rand();return nums[p%(r-l+1)+l];}
};

三、数组中的第K大元素

1、题目讲解

在这里插入图片描述

2、算法原理

在快排中,当我们把数组「分成三块」之后: [l, left] [left + 1, right - 1] [right, r] ,我们可以通过计算每⼀个区间内元素的「个数」,进⽽推断出我们要找的元素是在「哪⼀个区间」⾥⾯。
那么我们可以直接去「相应的区间」去寻找最终结果就好了。

3、代码实现

class Solution {
public:int findKthLargest(vector<int>& nums, int k) {srand(time(NULL));return qsort(nums,0,nums.size()-1,k);      }int qsort(vector<int>& nums,int l,int r,int k){if(l>=r) return nums[l];int key=GetKey(nums,l,r);int i=l,left=l-1,right=r+1;while(i<right){if(nums[i]<key) swap(nums[++left],nums[i++]);else if(nums[i]==key) i++;else swap(nums[--right],nums[i]);}int c=r-right+1,b=right-left-1;if(c>=k) return qsort(nums,right,r,k);else if(c+b>=k) return key;else return qsort(nums,l,left,k-b-c);}int GetKey(vector<int>& nums,int left,int right){   return nums[rand()%(right-left+1)+left];}
};

四、最小的K个数

1、题目讲解

在这里插入图片描述

2、算法原理

在快排中,当我们把数组「分成三块」之后: [l, left] [left + 1, right - 1] [right, r] ,我们可以通过计算每⼀个区间内元素的「个数」,进⽽推断出最⼩的 k 个数在哪些区间⾥⾯。
那么我们可以直接去「相应的区间」继续划分数组即可。

3、代码实现

class Solution {
public:vector<int> smallestK(vector<int>& arr, int k) {srand(time(NULL));qsort(arr,0,arr.size()-1,k);return {arr.begin(),arr.begin()+k};}void qsort(vector<int>& arr,int l,int r,int k){if(l>r) return;int left=l-1,right=r+1;int key=GetKey(arr,l,r);//三路划分for(int i=l;i<right;){if(arr[i]<key) swap(arr[++left],arr[i++]);else if(arr[i]==key) i++;else swap(arr[--right],arr[i]);}int a=left-l+1,b=right-left-1;if(a>k)  qsort(arr,l,left,k);else if(a+b>=k) return;else  qsort(arr,right,r,k-a-b);}int GetKey(vector<int>& arr,int l,int r){return arr[rand()%(r-l+1)+l];}
};

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

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

相关文章

JavaAgent介绍 | 基本介绍及无侵入打印方法耗时

闲聊 最近在配置skywalking的过程中发现了-javaagent:这个配置&#xff0c;这里做一个简单的学习 什么是JavaAgent 网上似乎没有直接的文档介绍这个&#xff0c;只找了instrument包的相关文档&#xff0c;其内容页。其中的内容也都是介绍javaagent相关。 instrument包下核心…

pytorch中dataloader的prefetch_factor出错

今天跑huggingface的示例的时候&#xff0c;遇到了最让我头疼的问题&#xff0c;国内网上还没有对应的解释&#xff0c;我可能是第一人&#xff08;汗&#xff09;先看看报错&#xff1a; Traceback (most recent call last):File "F:\transformer\transformers\examples…

JAVA面试虚拟机篇

1. JVM 内存结构 要求 掌握 JVM 内存结构划分 尤其要知道方法区、永久代、元空间的关系 结合一段 java 代码的执行理解内存划分 执行 javac 命令编译源代码为字节码 执行 java 命令 创建 JVM&#xff0c;调用类加载子系统加载 class&#xff0c;将类的信息存入方法区 创建…

Ubuntu22.04上作业调度管理软件PBS Torque的安装、配置及主要使用方法

文章目录 前言一、PBS及Torque是什么&#xff1f;二、Ubuntu22.04上Torque的安装和配置步骤1. 更新系统软件包2. 安装必要的软件包3. 下载和安装Torque4. 配置Torque5. 设置环境变量6. 配置和启动Torque服务7. 配置计算节点8. 创建队列的信息&#xff0c;名称 batch0019. 提交测…

【Visual Studio】技巧 :自动与活动文档同步

在这里插入图片描述 工具 -> 选项 -> 项目和解决方案 - 勾选上面的 我厉害不&#xff01;&#xff01;&#xff01;

【QT+QGIS跨平台编译】之四十三:【QScintilla+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、QScintilla介绍二、QScintilla下载三、文件分析四、pro文件五、编译实践5.1 Windows下编译5.2 Linux下编译5.3 MacOS下编译一、QScintilla介绍 QScintilla是一个基于Scintilla编辑器的Qt插件,为Qt应用程序提供了强大的文本编辑功能。Scintilla是一个用C++编写的…

BMS再进阶(新能源汽车电池管理系统)

引言 一文入门BMS&#xff08;电池管理系统&#xff09;_bms电池管理-CSDN博客 BMS进阶&#xff08;Type-C、PD快充、充电IC、SOC算法、电池管理IC&#xff09;_充电ic asi aso功能-CSDN博客 本文是上面两篇博客的续篇&#xff0c;之前都是讲解一些BMS基本原理&#xff0c;…

【初始RabbitMQ】持久化的实现

RabbitMQ持久化 如何保障当 RabbitMQ 服务停掉以后消 息生产者发送过来的消息不丢失。默认情况下 RabbitMQ 退出或由于某种原因崩溃时&#xff0c;它忽视队列 和消息&#xff0c;除非告知它不要这样做。确保消息不会丢失需要做两件事&#xff1a;我们需要将队列和消息都标记为…

Java学习day13

流&#xff08;Stream&#xff09; 流是一个非常强大的概念&#xff0c;它提供了一种高效且便捷的方式来处理集合数据。你可以将流看作是一系列数据项的管道&#xff0c;你可以对这些数据进行各种操作&#xff0c;如过滤、映射、排序和归约。 流的创建 在Java中&#xff0c;…

nginx upstream server主动健康检测模块添加https检测功能[完整版]

目录 1 缘起1.1 功能定义2. 实现后的效果2.1 配置文件2.2 运行效果3. 代码实现3.1 配置指令3.1.1 配置指令定义:3.1.2 配置指令结构体:3.1.3 配置指令源码定义:3.2 模块的初始化3.3 添加新的健康检测类型的定义3.4 握手完成后的处理3. 5 发送http请求3.6 接收http响应3.7 连…

Linux中精简卷对Oracle的影响

1.精简卷介绍 redhat官网详细介绍&#xff1a; https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/configuring_and_managing_logical_volumes/creating-and-managing-thin-provisioned-volumes_configuring-and-managing-logical-volumes 2.…

GPT升级信息:能记住用户的喜好和习惯!

OpenAI刚刚宣布了ChatGPT的一项激动人心的更新&#xff01; OpenAI在ChatGPT中新加了记忆功能和用户控制选项&#xff0c;这意味着GPT能够在与用户的互动中记住之前的对话内容&#xff0c;并利用这些信息在后续的交谈中提供更加相关和定制化的回答。 这一功能目前正处于测试阶段…

mysql宕机了怎么恢复数据

检查 MySQL 服务器状态&#xff1a;首先&#xff0c;确认 MySQL 服务器是否真的宕机。可以尝试连接 MySQL 服务器并执行一些简单的查询&#xff0c;例如 SELECT 1;。如果连接失败或查询无响应&#xff0c;那么可能是 MySQL 服务器宕机。 检查错误日志&#xff1a;在 MySQL 服务…

Shiro-11-web 介绍

配置 将Shiro集成到任何web应用程序的最简单方法是在web.xml中配置一个Servlet ContextListener和过滤器&#xff0c;该Servlet了解如何读取Shiro的INI配置。 INI配置格式本身的大部分是在配置页面的INI部分中定义的&#xff0c;但是我们将在这里介绍一些额外的特定于web的部…

【leetcode刷题之路】面试经典150题(2)——双指针+滑动窗口+矩阵

文章目录 2 双指针2.1 【双指针】验证回文串2.2 【双指针】判断子序列2.3 【双指针】两数之和 II - 输入有序数组2.4 【双指针】盛最多水的容器2.5 【双指针】三数之和 3 滑动窗口3.1 【双指针】长度最小的子数组3.2 【滑动窗口】无重复字符的最长子串3.3 【哈希表】串联所有单…

HTML板块左右排列布局——左侧 DIV 固定宽度,右侧 DIV 自适应宽度,填充满剩余页面

我们可以借助CSS中的 float 属性来实现。 实例&#xff1a; 布局需求&#xff1a; 左侧 DIV 固定宽度&#xff0c;右侧 DIV 自适应宽度&#xff0c;填充满剩余页面。 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta http-e…

介绍如何解决msvcr120.dll丢失问题,msvcp120.dll常见问题的解答

msvcr120.dll是Windows操作系统中的一个重要的动态链接库文件&#xff0c;它包含了许多与C运行库相关的函数。然而&#xff0c;有时用户在运行某些应用程序或游戏时可能会收到"msvcr120.dll丢失"的错误提示。本文将介绍如何解决msvcr120.dll丢失问题&#xff0c;并提…

【c语言】c语言转义字符详解

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;c语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

prometheus基于consul的服务发现

文章目录 一、基础二、安装consul下载地址启动consul访问consul 三、编写服务发现文件nodes.json四、prometheus配置consul发现修改prometheus.yml重启Prometheus 参考 一、基础 二、安装consul 下载地址 https://developer.hashicorp.com/consul/install 启动consul mkdi…

HCIP-MGRE实验配置、PPP的PAP认证与CHAP认证、MGRE、GRE网络搭建、NAT

实验要求 R5为ISP,只能进行IP地址配素&#xff0c;其所有地址均为公有IP地址R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方 R2与R5之间使用PPP的chap认证&#xff0c;R5为主认证方 R3与R5之间使用HDLC封装。R1/R2/R3构建一个MGRE环境&#xff0c;R1为中心站点;R1、R4间为…