【手撕】快排-分治

news2024/9/20 22:27:15

 1. 颜色分类

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=O83Ahttps://leetcode.cn/problems/sort-colors/description/

代码

class Solution {
    public void sortColors(int[] nums) {
        int left = -1 ,  right = nums.length;
        int i = 0;
        while( i < right){
            if(nums[i] == 0){
                swap(nums,++left , i++);
            }else if( nums[i] == 1){
                i++;
            }else{
                swap(nums,--right ,i);
            }
        }
    }
    private static void swap(int[] arr , int left , int right){
        int tmp = arr[left];
        arr[left] = arr[right];
        arr[right] = tmp;
    }
}

2. 快排

. - 力扣(LeetCode)

代码

class Solution {
    public int[] sortArray(int[] nums) {
        qsort(nums,0 , nums.length -1);
        return nums;
    }
    private static void qsort(int[] arr, int l , int r){
        if(l >= r) return ;
        int left = l - 1 , right = r + 1;
        //随机选择一个基准元素
        int povit = arr[new Random().nextInt( r - l + 1) + l];
        int i = l;
        //按照基准元素将数组划分成3块
        while( i < right){
            if(arr[i] < povit) swap(arr , ++left , i++);
            else if(arr[i] == povit) i++;
            else swap(arr , --right , i);
        }
        //继续划分
        qsort(arr, l , left);
        qsort(arr , right , r);
    }

    private static void swap(int[] arr , int a , int b){
        int tmp = arr[a];
        arr[a] = arr[b];
        arr[b] = tmp;
    }
}

3. 第 K 大

代码

class Solution {
    public int findKthLargest(int[] nums, int k) {
        return quickselect(nums, 0, nums.length - 1, k);
    }

    public static int quickselect(int[] nums, int l, int r, int k) {
        if( l == r) return nums[l];
        int povit = nums[new Random().nextInt(r - l + 1) + l];
        int left = l - 1 , right = r + 1 , i = l;
        int a = 0 , b = 0, c = 0;
        while(i < right){
            if(nums[i] < povit) {
                swap(nums , ++left , i++);
                a++;
            }else if(nums[i] == povit){
                i++;
                b++;
            }else{
                swap(nums , --right , i);
                c++;
            }
        }
        //划分后根据数量决定继续去哪里找TOP K
        if(c >= k) return quickselect(nums , right , r, k) ;
        else if(b+c >= k) return povit;
        else return quickselect(nums, l , left, k - b -c) ;
    }
    public static  void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

4. 返回最小的 K 个数

. - 力扣(LeetCode)

class Solution {
    public int[] inventoryManagement(int[] nums, int k) {
        qsort(nums, 0 , nums.length - 1, k);
        int[] ret = new int[k];
        for(int i = 0 ; i < k; i++){
            ret[i] = nums[i];
        }
        return ret;
    }

    private static void qsort(int[] nums, int l, int r, int k){
        while(l >= r) return;
        int povit = nums[new Random().nextInt(r - l + 1) + l];
        int left = l - 1, right = r + 1, i = l;
        int a , b ,c ; a = 0; b= 0; c = 0;
        while(i < right){
            
            if(nums[i] < povit) {swap(nums, ++left , i++); a++;}
            else if(nums[i] == povit){ i++; b++;}
            else{ swap(nums, --right , i); c++;}
        }
        //划分完毕 根据情况决定去哪一部分继续寻找
        if(a >= k) qsort(nums, l, left, k);
        else if(a + b >= k) return;
        else qsort(nums, right, r, k - a - b);
    }

    private static void swap(int[] nums, int a, int b){
        int tmp = nums[a];
        nums[a] = nums[b];
        nums[b] = tmp;
    }
}

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

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

相关文章

Neo4j入门案例:三星堆

创建一个关于三星堆的知识图谱可以是一个非常有趣的项目&#xff0c;它可以帮助理解如何使用Neo4j来存储和查询复杂的关系数据。三星堆文化以其独特的青铜器、金器和其他文物而闻名&#xff0c;这为我们提供了一个丰富的历史背景来构建知识图谱。 数据模型定义 实体类型&#…

数据安全查询-—SAAS本地化及未来之窗行业应用跨平台架构

一、数据库安全查询 默认数据库查询是不区分大小写的&#xff0c;这样无法区分Mm&#xff0c;Admin&#xff0c;admin 二、thinkphp 区分大小写 $condition "binary appdhj_sn {$应用sn}"; 三、原始mysql select * from TableA where binary columnA aaa; 四、…

mtk7628 网口灯问题

板子上电插入网线到网口&#xff0c;只有wan口灯会亮&#xff0c;插入lan口灯不会亮。对比了ok的代码&#xff0c;先对比设备树&#xff0c;未看到网口相关的GPIO。 mt7628an_WMD-7688A-12816.dts mt7628an_hilink_hlk-7628n.dts 继续查看网口相关代码&#xff0c;加打印&…

Android应用程序启动源码分析

文章目录 Android应用程序启动源码分析一、启动流程二、Launcher通知AndroidOS(用户点击图标)2.1 Activity.java2.2 Instrumentation.java2.3 ActivityTaskManagerService.java2.4 ActivityStarter.java2.5 RootWindowContainer.java2.5.1 Task.java2.5.2 TaskFragment.java 2.…

基于python+django+vue的个性化餐饮管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的视…

勇于尝试,永远行动 - 《洛克菲勒写给儿子的38封信》读书笔记

两倍速听过好几遍的书&#xff0c;洛克菲勒的思想和志向&#xff0c;配得上他的成就。 “在尝试中寻找突破&#xff0c;在行动中成就自我。”这是洛克菲勒写给儿子的箴言&#xff0c;也是他一生的真实写照。在这38封信中&#xff0c;他不仅分享了自己的工作心得&#xff0c;更…

Docker安装mysql安装nginx安装Redis

Docker安装mysql 下载镜像 docker pull mysql:8.0注意,使用此方法安装镜像需要提前配置镜像源,详情看之前的文章 安装 docker run -d -p 3306:3306 \ --name mysql \ --restartalways \ --privilegedtrue \ -e TZAsia/Shanghai \ -e MYSQL_ROOT_PASSWORDroot \ mysql:8.0进…

【重学 MySQL】二十九、函数的理解

【重学 MySQL】二十九、函数的理解 什么是函数不同 DBMS 函数的差异函数名称和参数功能实现数据类型支持性能和优化兼容性和可移植性 MySQL 的内置函数及分类单行函数多行函数&#xff08;聚合函数&#xff09;使用注意事项 什么是函数 函数&#xff08;Function&#xff09;在…

【PHP代码审计】 PHP环境搭建

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 安装phpstudy 泥菩萨-CSDN博客 安装vscode 直接去官网下载安装包&#xff0c;然后双击安装即可。官网地址&#xff1a;htt…

24/9/15 kaggle数字识别器

这次做的是数字识别器&#xff0c;借鉴了大佬的文章Kaggle竞赛实战系列&#xff08;一&#xff09;&#xff1a;手写数字识别器&#xff08;Digit Recognizer&#xff09;得分99.53&#xff05;、99.91%和100%_手写数字识别实现 digist-CSDN博客 加入了自己对大佬里面步骤的解…

多模态大语言模型综述(中)-算法实用指南

本文是Multimodal Large Language Models: A Survey的译文之算法实用指南部分。 上&#xff1a;摘要、概念与技术要点实用指南中&#xff1a;算法实用指南(本文)下: 任务的实用指南(应用)、挑战等 原始信息 标题: Multimodal Large Language Models: A Survey译文: 多模态大…

Conda和pip 清空缓存

conda clean --all然后选y&#xff0c;如下图&#xff1a; pip cache purge # 清除所有缓存

视频工具EasyDarwin将本地视频生成RTSP给WVP拉流列表

效果 ffmpeg生成rtsp流 EasyDarwin的rtsp端口默认的是10054, 使用ffmpeg将本地视频转到EasyDarwin的rtsp。 F:\rtsp\ffmpeg-7.0.2-essentials_build\bin>ffmpeg -re -i F:\rtsp\123.mp4 -rtsp_transport tcp -vcodec h264 -f rtsp rtsp://127.0.0.1:10054/video11 它的直播…

【C#】vs2022 .net8

Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com) 更新就会出现

2024年【浙江省安全员-C证】考试试卷及浙江省安全员-C证模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 浙江省安全员-C证考试试卷是安全生产模拟考试一点通总题库中生成的一套浙江省安全员-C证模拟考试题库&#xff0c;安全生产模拟考试一点通上浙江省安全员-C证作业手机同步练习。2024年【浙江省安全员-C证】考试试卷及…

【裸机装机系列】6.kali(ubuntu)-图形界面优化-让linux更适合你的使用习惯

接下来就是图形化界面操作的部分了。会用少量截图来说明&#xff0c;图太多会影响阅读体验&#xff0c;直接文字来描述过程吧。 1> 入口 任务栏左上角——> 开始菜单——> settings——> settings manager 大部分配置都会在这里面设置。 2> 设置里面分的4大…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——13.mapset

1. 关联式容器 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、 forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面 存储的是元素本身。那什么是关…

HCIA--实验十五:ACL通信实验(1)

1.基本ACL配置 一、实验内容 1.需求/要求&#xff1a; 使用一台交换机&#xff0c;两台PC&#xff0c;通过在交换机上配置基本ACL&#xff0c;实现拒绝PC1到PC2的访问。 二、实验过程 1.拓扑图 2.步骤 1.给PC1和PC2配置ip地址&#xff1a; 2.在交换机SW1上做ACL的配置 […

QT模型视图结构1

文章目录 Qt 模型视图结构概述(一)1、模型/视图结构基本原理2、模型3、视图4、代理5、简单实例 Qt 模型视图结构概述(一) ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据&#xff0c;视图组件显示模型中的数据&#xff0c;在视图组件里修改的数据会…

QTreeView模糊查询

本文代码效果如下&#xff1a; 本文代码&#xff1a; https://download.csdn.net/download/Sakuya__/89759410https://download.csdn.net/download/Sakuya__/89759410 代码之路 MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #incl…