day17

news2024/11/18 1:49:29

第一题

本题可以采用快速排序的思想,适应随机数指定和三指针划分数组为三个区域的思想:

        其中指针的移动细节如上题故事,如下所示:

        当a区域的商都大于k时,我们要查找的k位置元素就在左区域,我们进一步在左区域里面进一步划分区域和查找;

        当a和b的长度大于k时,我们要查找的k位置元素就在中间区域,这时候直接返回区域中间的数值;

         当上述的两个条件都不满足时,我们要查找的k位置元素就在右边区域,我们进一步在右区域里面进一步划分区域和查找第k-a-b小的元素;

        综上所述,代码如下:

class Solution {
    public int[] getLeastNumbers(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;
    }

    public void qsort(int[] nums, int l, int r, int k)
    {
        if(l >= r) return;
        // 1. 随机选择⼀个基准元素 + 数组分三块
        int key = nums[new Random().nextInt(r - l + 1) + l];
        int left = l - 1, right = r + 1, i = l;
        while(i < right){
            if(nums[i] < key) swap(nums, ++left, i++);
            else if(nums[i] == key) i++;
            else swap(nums, --right, i);
        }
        // 2. 分类讨论
        int a = left - l + 1, b = right - left - 1;
        if(a > k) qsort(nums, l, left, k);
        else if(a + b >= k) return;
        else qsort(nums, right, r, k - a - b);
    }
    public void swap(int[] nums, int i, int j){
        int t = nums[i];
        nums[i] = nums[j];
        nums[j] = t;
    }
}

第二题

        本题我们采用分治合并的思想,所谓的分支合并思想如下图所示:

        首先将一个数组根据中间位置分成两个区域,左区域和右区域,记下来前往左区域将该区域已按照中间位置分为左1区域和右1区域,这样一直划分下去,直到最左边的区域到了划分极限返回开始处理每一层级的右区域也开始划分,直到不能划分为止,这时候就是用指针,两个区域两个指针开始比较每个指针所指的数,开始从小到大的排序,直到这一层数字有序之后开始返回上一层,继续使用双指针排序,直到最后一个上层,拍完之后将这些新数组中的数一一遍历到原数组中,即可;

        代码如下:

class Solution {
    int[] tmp;
    public int[] sortArray(int[] nums) {
        tmp = new int[nums.length];
        mergeSort(nums,0,nums.length-1);
        return nums;
    }

    public void mergeSort(int[] nums,int left,int right){
        if(left >=right) return;
        int mid = (left + right)/2;
        mergeSort(nums,left,mid);
        mergeSort(nums,mid+1,right);

        int cur1 = left,cur2 = mid+1,i=0;
        while(cur1 <= mid && cur2 <= right){
            tmp[i++] = nums[cur1] <= nums[cur2] ? nums[cur1++] : nums[cur2++];
        }
        while(cur1 <= mid) tmp[i++] = nums[cur1++];
        while(cur2 <= right) tmp[i++] = nums[cur2++];
        // 4. 还原
        for(int j = left; j <= right; j++) 
            nums[j] = tmp[j - left];
    }
}

 ps:本次的内容就到这里了,如果大家感兴趣的话就请一键三连哦!!!

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

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

相关文章

适合源代码的加密系统

在信息化高度发展的今天&#xff0c;源代码的安全问题日益受到重视。源代码是企业或组织的核心资产&#xff0c;一旦泄露或被篡改&#xff0c;将会对其造成巨大的经济损失和声誉风险。因此&#xff0c;如何有效防止源代码的泄露和算改成为了企业和组织急需解决的问题。沙盒技术…

Git时光机、Git标签、Git分支、GitHub协作

Git时光机&#xff08;切换版本&#xff09; 1.查看提交历史 HEAD指针指向这次分支的最后一次提交 版本信息一行显示【git log --prettyoneline】 2.引用日志【git reflog】 &#xff08;只在自己的工作区中存在&#xff09; 非常重要&#xff1a;当HEAD指针进行切换之后&…

有类似注册表编辑器的vb6源码吗?vba注册表编辑器

第一步是要实现注册表功能的读写&#xff0c;所有数据类型&#xff0c;枚举列出所有子项 第二步&#xff0c;树形控件之类显示&#xff0c;可视化修改&#xff0c;查看 第三步&#xff0c;导入导出注册表 第四步&#xff0c;注册表监控&#xff0c;检测哪些注册表项是新建、删除…

【Flutter】交错动画自定义动画Hero动画

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Flutter学习 &#x1f320; 首发时间&#xff1a;2024年5月29日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 目…

北京大学第一医院与智源研究院共同发布基于可信执行环境的AI医学影像挑战赛

肾动脉狭窄是导致继发性高血压及肾功能不全的常见原因&#xff0c;而目前针对肾动脉狭窄功能学的评估尚处于探索阶段。数据保护和可信计算环境是目前人工智能技术应用于临床研究的一大瓶颈。北京大学第一医院与北京智源人工智能研究院心脏AI 联合研究中心特发布基于可信执行环境…

wps表格样式【笔记】

wps表格样式【笔记】 前言版权推荐wps表格样式第一种方法第二种方法 最后 前言 2024-5-15 19:25:47 以下内容源自《【笔记】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://jsss-1.blog.csdn.net …

【第五节】C++的多态性与虚函数

目录 前言 一、子类型 二、静态联编和动态联编 三、虚函数 四、纯虚函数和抽象类 五、虚析构函数 六、重载&#xff0c;重定义与重写的异同 前言 面向对象程序设计语言的三大核心特性是封装性、继承性和多态性。封装性奠定了基础&#xff0c;继承性是实现代码重用和扩展…

JWT身份验证相关安全问题

前言&#xff1a;工作中需要基于框架开发一个贴近实际的应用&#xff0c;找到一款比较合适的cms框架&#xff0c;其中正好用到的就是jwt做身份信息验证&#xff0c;也记录一下学习jwt相关的安全问题过程。 JWT介绍 Json web token (JWT), 是为了在网络应用环境间传递声明而执行…

如何遍历并处理不平衡的Python数据集

目录 一、引言 二、不平衡数据集的概念与影响 三、处理不平衡数据集的策略 重采样策略 集成学习方法 代价敏感学习 一分类方法 四、Python工具与库 五、案例分析与代码实现 案例一&#xff1a;使用imbalanced-learn库进行上采样 案例二&#xff1a;使用scikit-learn…

知识付费小程序源码系统 界面支持万能DIY装修,一站式运营 附带完整的源代码以及搭建教程

系统概述 这是一款功能强大的知识付费小程序源码系统&#xff0c;它为用户提供了一个全面的平台&#xff0c;能够满足各种知识付费场景的需求。其界面支持万能 DIY 装修&#xff0c;让用户可以根据自己的品牌形象和风格进行个性化定制&#xff0c;打造出独具特色的小程序界面。…

台灯护眼是真的吗?台灯怎么选对眼睛好?看这一篇就够了

随着现代生活方式的改变&#xff0c;孩子们面临着越来越多的视力挑战。我们一直使用普通台灯&#xff0c;往往忽略了不合适的台灯也会给孩子眼部健康带来危害。普通台灯&#xff0c;尤其是使用白炽灯或荧光灯作为光源的台灯&#xff0c;会发射出紫外线。这些紫外线辐射对孩子的…

HTML新春烟花盛宴

目录 写在前面 烟花盛宴 完整代码 修改文字

内存卡频频提示格式化?数据恢复全攻略

内存卡提示需要格式化 在数字时代&#xff0c;内存卡作为我们存储数据的常用设备&#xff0c;广泛应用于手机、相机、无人机等多种设备中。然而&#xff0c;不少用户在使用过程中会突然遭遇一个令人头疼的问题——内存卡提示需要格式化。这一提示往往伴随着数据的丢失风险&…

端午节趣味互动小游戏的作用是什么

端午节吃粽子&#xff0c;多数行业商家都可借势进行品牌营销&#xff0c;而一场营销效果的优劣&#xff0c;除了好方案外&#xff0c;还需要好的工具/渠道及运营等&#xff0c;围绕粽子元素的互动小游戏是营销互动的主要形式之一。 运用【雨科】平台拥有多款端午节粽子主题互动…

STM32-10-定时器

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG 文章目录 一、STM32 基础定时器1. 基本定时器简介2. 基本定时器框图3. 基本定时器相关寄存器4. 定时器溢出…

单链表,双向链表,循环链表

文章目录 链表单链表双向链表循环链表链表的底层结构链表的实现代码 链表 链表分为单链表&#xff0c;双向链表&#xff0c;循环链表。 单链表 如上图所示&#xff0c;链表是由多个节点组成&#xff0c;节点由数据域与指针域组成&#xff0c;数据域用于存储数据&#xff0c;指…

服务器主机托管一站式托管服务有哪些?

服务器主机托管一站式托管服务&#xff0c;作为现代企业信息化建设的重要一环&#xff0c;为企业提供了一种高效、安全、可靠的服务器运行环境。下面&#xff0c;我们将从多个方面详细介绍这一服务的内容。 一、硬件与基础设施 服务器主机托管服务首先涵盖了服务器硬件和网络基…

windows环境redis未授权利用手法总结

Redis未授权产生原因 1.redis绑定在0.0.0.0:6379默认端口&#xff0c;直接暴露在公网&#xff0c;无防火墙进行来源信任防护。 2.没有设置密码认证&#xff0c;可以免密远程登录redis服务 漏洞危害 1.信息泄露&#xff0c;攻击者可以恶意执行flushall清空数据 2.可以通过ev…

前端Vue自定义个性化导航栏菜单组件的设计与实现

摘要&#xff1a; 随着前端技术的飞速发展和业务场景的日益复杂&#xff0c;组件化开发已成为提升开发效率和降低维护成本的关键手段。本文将以Vue uni-app平台为例&#xff0c;介绍如何通过自定义导航栏菜单组件&#xff0c;实现业务逻辑与界面展示的解耦&#xff0c;以及如何…

25 使用MapReduce编程了解垃圾分类情况

测试数据中1表示可回收垃圾&#xff0c;2表示有害垃圾&#xff0c;4表示湿垃圾&#xff0c;8表示干垃圾。 统计数据中各类型垃圾的数量&#xff0c;分别存储可回收垃圾、有害垃圾、湿垃圾和干垃圾的统计结果。 &#xff08;存储到4个不同文件中&#xff0c;垃圾信息&#xff0…