leetcode算法之分治-快排

目录

  • 1.颜色分类
  • 2.排序数组
  • 3.数组中的第k个最大元素
  • 4.最小的k个数

1.颜色分类

颜色分类
在这里插入图片描述

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

2.排序数组

排序数组
在这里插入图片描述

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 left = l-1,right = r+1,i=l;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]);}//[l,left] [left+1,right-1] [right,r]qsort(nums,l,left);qsort(nums,right,r);}//等概率获取区间内的任何数据int getRandom(vector<int>& nums,int left,int right){return nums[rand()%(right-left+1)+left];}
};

3.数组中的第k个最大元素

数组中的第k个最大元素
在这里插入图片描述

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];//1.随机选择基准元素int left = l-1,right=r+1,i=l;int key = nums[rand()%(r-l+1)+l];while(i<right){if(nums[i]<key) swap(nums[++left],nums[i++]);else if(nums[i] == key) i++;else swap(nums[--right],nums[i]);}//2.分情况讨论//[l,left][left+1,right-1][right,r]int c = r-right+1,b=right-left-1;if(c>=k) return qsort(nums,right,r,k);else if(b+c>=k) return key;else return qsort(nums,l,left,k-b-c);}
};

4.最小的k个数

最小的k个数
在这里插入图片描述

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,i=l;int key = getRandom(arr,l,r);while(i<right){if(arr[i]<key) swap(arr[++left],arr[i++]);else if(arr[i] == key) i++;else swap(arr[--right],arr[i]);}//[l,left][left+1,right-1][right,r]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 getRandom(vector<int>& arr,int left,int right){return arr[rand()%(right-left+1)+left];}
};

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

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

相关文章

全新云开发工具箱:融合多项功能的微信小程序源码解决方案

全新云开发工具箱&#xff1a;融合多项功能的微信小程序源码解决方案 这款微信小程序源码提供了超过40个功能&#xff0c;集合了各种实用工具&#xff0c;成为一款全能工具箱。这些功能包括证件照制作、垃圾分类查询、个性签名制作、二维码生成、文字九宫格、手持弹幕、照片压…

2023.11.17 关于 Spring Boot 日志文件

目录 日志文件作用 常见的日志框架说明 门面模式 日志的使用 日志的级别 六种级别 日志级别的设置 日志的持久化 使用 Lombok 输出日志 实现原理 普通打印和日志的区别 日志文件作用 记录 错误日志 和 警告日志&#xff08;发现和定位问题&#xff09;记录 用户登录…

Django+Vue项目创建 跑通

参考链接&#xff1a; 【精选】DjangoVue项目构建_django vue-CSDN博客 一、背景 主要介绍如何使用后端Django 前端Vue 的技术栈快速地搭建起一套web项目的框架。 为什么使用Django和Vue? Django是Python体系下最成熟的web框架之一&#xff0c;由于Python语言的易用…

算法设计与分析【期中+期末复习知识点总结】(持续更新)

第1章&#xff1a;算法概述 算法&#xff1a;具有输入、输出、确定性、有限性。 程序&#xff08;算法数据结构程序&#xff09;&#xff1a;具有输入、输出、确定性&#xff08;注意&#xff1a;程序可以不满足有限性&#xff0c;如操作系统是在无限循环中执行的程序&#x…

文心一言 VS 讯飞星火 VS chatgpt (138)-- 算法导论11.4 2题

二、用go语言&#xff0c;试写出HASH-DELETE 的伪代码;修改 HASH-INSERT&#xff0c;使之能处理特殊值DELETED。 文心一言&#xff1a; 首先&#xff0c;让我们定义一个基本的哈希表数据结构。这个结构将包括一个存储键值对的哈希表和一个存储已删除键值对的队列。我们可以用…

基于SpringBoot的SSMP整合案例(在Linux中发布项目的注意事项与具体步骤步骤)

前言与注意 这几天在Linux中上线之前的小项目时&#xff0c;遇到了很多的问题&#xff0c;Linux镜像的选择&#xff0c;jdk&#xff0c; mysql在linux中的下载&#xff0c;使用finallshell连接linux&#xff0c;使用tomcat连接linux中的数据库........ 在下面的注意事项中我会将…

【好用的个人工具】搭建一款实用的个人IT工具箱——it-tools

【好用的个人工具】搭建一款实用的个人IT工具箱——it-tools 一、it-tools介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载it-tools镜像五、部署it-tools工具箱5.1 创建…

使用ChatGPT进行数据分析案例——贷款数据分析

目录 数据数据 每一行是一个记录,代表着一笔贷款,每一列是一个特征,一共1万多条数据,最后一列非常重要save_loans是否成功收回

系列四、强引用、软引用、弱引用、虚引用分别是什么?

一、整体架构 二、强引用&#xff08;默认支持模式&#xff09; 2.1、概述 当内存不足时&#xff0c;JVM开始垃圾回收&#xff0c;对于强引用的对象&#xff0c;就算是出现了OOM也不会对该对象进行回收&#xff0c;死都不收。 强引用是我们最常见的普通对象引用&#xff0c;只…

华为模拟器dhcp实验

实验需求&#xff0c;pc1 pc2 pc3 获取到地址且能ping通&#xff0c;pc1 pc2 为地址池模式&#xff0c;pc3为接口模式 上配置 #sysname AR1# dhcp enable # interface GigabitEthernet0/0/0ip address 10.0.47.254 255.255.255.0 dhcp select relaydhcp relay server-ip 10.0…

在线随机字符串生成工具

具体请前往&#xff1a;在线随机字符串生成器--通过该工具生成动态复杂随机密码,随机字符串等&#xff0c;加密盐等

C语言实现带头双向循环链表

文章目录 写在前面1. 链表节点的定义2. 链表的初始化3. 插入数据3.1 头插3.2 尾插3.3 在指定位置的前面插入数据 4 删除数据4.1 头删4.2 尾删4.3 删除指定位置的数据 5 查找并修改数据5. 链表的销毁 写在前面 上面文章用C语言实现了单链表的增删查改&#xff0c;我们知道&…