快排——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.hqwc.cn/news/476002.html

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

相关文章

openAI的视频技术Sora背后:奥特曼清单法

hello家人们...本人熟悉PS、Xd、Ai、Sketch、Figma、墨刀、即时设计、mastergo、Pixso等行业设计软件以及前端开发等技能&#xff0c;拥有10年的UI经验&#xff0c;我们可以通过关注评论私信交流以帮助到您解决UI工作中的烦恼&#xff01;谢谢 OpenAI的视频技术Sora背后&#x…

ArkUI中自定义组件的生命周期

文章概叙 本文主要是介绍下在作为page以及component的时候的生命周期&#xff0c;以及调用API等应该在哪个生命周期使用。 书接上回 之前的博客已经结束了对底部栏的操作&#xff0c;现在开始需要关注到具体内容的对接了。 而开发的第一步&#xff0c;我们对页面的生命周期…

见智未来:数据可视化引领智慧城市之潮

在数字时代的浪潮中&#xff0c;数据可视化崭露头角&#xff0c;为打造智慧城市注入了强大的活力。不再被深奥的数据所束缚&#xff0c;我们通过数据可视化这一工具&#xff0c;可以更加接近智慧城市的未来。下面我就以可视化从业者的角度来简单聊聊这个话题。 数据可视化首先为…

GET与 POST

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) GET 和 POST 有什么区别? 根据 REC 规范&#xff0c;GET的语义是从服务器获取指定的资源&#xff0c;这个资源可以是静态的文本、页面、图片视频等。GET请求的参数位置一般是写在 URL 中&#xff0c;UR…

OpenAI Sora视频生成机制:时空补丁

AI如何将静态图像转化为动态、逼真的视频&#xff1f;OpenAI 的 Sora 通过时空补丁&#xff08;spacetime patches&#xff09;的创新使用给出了答案。 独特的视频生成方法 在生成模型的世界中&#xff0c;我们看到了从 GAN 到自回归和扩散模型的许多方法&#xff0c;它们都有…

设计usb转ttl模块的一些问题

这个是我之前设计的usb转ttl模块&#xff0c;用到的是CH340N芯片&#xff0c;目前遇到的问题以及疑问有以下几个&#xff0c;望大佬们解答&#xff1a; 1 想设计的是一块可以选择3.3V或者5V输出&#xff0c;所以我用了在TTL输出那里加了VCC、VCC3.3V、5V这几个引脚&#xff0c…

Unity所有关于旋转的方法详解

前言&#xff1a;欧拉角和四元数的简单描述 我们在Inspector面板上看到的rotation其实是欧拉角&#xff0c; 我们将Inspector面板设置成Debug模式&#xff0c;此时看到的local Rotation才是四元数。 Unity中的欧拉旋转是按照Z-X-Y顺规执行的旋转&#xff0c;一组欧拉旋转过程中…

腾讯云4核8G12M服务器支持多少人在线?

4核8G服务器支持多少人同时在线访问&#xff1f;阿腾云的4核8G服务器可以支持20个访客同时访问&#xff0c;关于4核8G服务器承载量并发数qps计算测评&#xff0c;云服务器上运行程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&…

Shiro-11-web 介绍

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

OpenHarmony—UIAbility组件与UI的数据同步

基于HarmonyOS的应用模型&#xff0c;可以通过以下两种方式来实现UIAbility组件与UI之间的数据同步。 使用EventHub进行数据通信&#xff1a;基于发布订阅模式来实现&#xff0c;事件需要先订阅后发布&#xff0c;订阅者收到消息后进行处理。使用globalThis进行数据同步&#…

你的知识,也许会成为进步的阻碍

我在很多场合&#xff0c;都会谈到一个词&#xff0c;叫做「终身学习者」。 包括我自己&#xff0c;也一直把它挂在个人介绍里。 有朋友问过我&#xff1a;这个介绍一点也不厉害&#xff0c;也不能给你带来任何机会&#xff0c;为什么一直挂着它&#xff1f; 其实&#xff0c;与…

JVM--- 垃圾收集器详细整理

目录 一、垃圾收集需要考虑的三个事情&#xff1a; 二、垃圾回收针对的区域 三、如何判断对象已死 1.引用计数算法&#xff1a; 2.可达性分析算法 四、引用 五、生存还是死亡&#xff1f; 六、回收方法区 七、垃圾收集算法 1.分代收集理论 2.标记-清除算法 3.标记-复制算…