day17

第一题

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

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

        当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.mzph.cn/pingmian/18808.shtml

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

相关文章

【WP|1】深入解析WordPress常用的函数、方法

WordPress 是一个广泛使用的内容管理系统&#xff08;CMS&#xff09;&#xff0c;其灵活性和扩展性使其成为创建和管理网站的首选。为了充分利用 WordPress 的功能&#xff0c;了解其常用的函数和方法是必不可少的。本文将深入解析一些最常用和最有用的 WordPress 函数和方法&…

Java实现一个简单的计算器

当实现一个简单的计算器时&#xff0c;我们可以创建一个Java程序&#xff0c;该程序接受用户输入的两个数字和一个运算符&#xff0c;然后执行相应的数学运算并输出结果。下面是一个简单的Java代码示例&#xff0c;用于实现这样的计算器&#xff1a; import java.util.Scanner…

【15年成为通用MCU第一,STM32凭什么?】

微控制器&#xff08;MCU&#xff09;是这个快速变化世界的重要助推器和核心组成部分&#xff0c;也是整个数字世界应用最普遍的数字芯片之一。通用MCU市场竞争情况复杂且多样&#xff0c;开发者需要选择最适合的MCU产品完成创新设计。而MCU市场竞争发展的重点一定是以开发者为…

100个 Unity小游戏系列五 -Unity 抽奖游戏专题三老虎机游戏

一、演示效果 二、知识点讲解 2.1 布局 public void CreateItems(SlotsData[] slotsData){isInited false;slotsPrizeList new List<SlotsData>();for (int i 0; i < slotsData.Length; i){var item slotsData[i];slotsPrizeList.Add(item);}float bottomY -it…

学习sam的过程

一、抓包 我平时都是用花瓶去抓包的&#xff0c;配置也很简单。就是下载软件&#xff0c;然后一步步安装。下载地址&#xff1a;Download a Free Trial of Charles • Charles Web Debugging Proxy 。然后配置手机代理 对于那些走http协议的app是可以的&#xff0c;https的还是…

SAP锁机制(SAP Locks)经验小结

1. 数据一致性与锁 为什么要有锁机制&#xff1f;其背后的核心逻辑在于“保证数据的一致性”。 当数据被应用程序修改时&#xff0c;我们必须要保证修改后的数据具有一致性。在SAP系统中&#xff0c;将一致的数据状态从一个状态变动到另一个一致状态的时间跨度被称为LUW&…

应对意外断电:气膜建筑的安全防护与智能管理—轻空间

气膜建筑以其独特的结构和高效的建设方式&#xff0c;广泛应用于各类场馆、仓储设施和临时展馆。然而&#xff0c;当遇到意外断电导致气膜内部无法送风时&#xff0c;如何避免气膜倒塌&#xff0c;确保建筑安全呢&#xff1f; 断电应急响应 气膜建筑配备了先进的智能控制系统&a…

记录一次Redisson使用synchronized和分布式锁不生效的原因

最近在开发的过程中&#xff0c;遇到了一个并发场景&#xff0c;用户进行方案复制的时候&#xff0c;当快速点击两次操作的时候&#xff0c;出现了复制方案重名的情况&#xff0c;实际上是复制方案的方案名称&#xff0c;是由后端根据数据库已有的方案名称和当前要复制的方案名…

【退役之重学Java】总结

带着一把伤心的吉他&#xff0c;我背井离乡 你居然想要成为别人的老婆 只有代码 不伤人心 一、深入理解 JVM 底层原理 运行时数据区域 JVM 运行时数据区域&#xff0c;分为栈区、堆区、方法区、程序计数器、本地方法栈 栈区存放的是变量的最浅层的值&#xff0c;如果是基本数据…

git新电脑下载配置记录

1、官网下载 2、安装 3、配置 &#xff08;1&#xff09;先生成密钥 ssh-keygen -t rsa -C “XXXqq.com” &#xff08;2&#xff09;生成两个文件&#xff0c;复制.pub,在GitHub的setting里面设置ssh&#xff0c; &#xff08;3&#xff09;验证远程是否配置成功 ssh -T g…

Python轻量级的插件框架库之pluginbase使用详解

概要 在软件开发中,插件系统是一个常见的需求。插件系统允许开发者动态加载和卸载功能模块,从而提高应用程序的灵活性和可扩展性。Python的pluginbase库是一个轻量级的插件框架,旨在简化插件系统的构建过程。pluginbase库提供了一套简单易用的API,使开发者能够快速集成插件…

【408真题】2009-23

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

Windows电脑高颜值桌面便利贴,便签怎么设置

在这个看颜值的时代&#xff0c;我们不仅在衣着打扮上追求时尚与美观&#xff0c;就连电脑桌面也不愿放过。一张唯美的壁纸&#xff0c;几款别致的小工具&#xff0c;总能让我们的工作空间焕发出不一样的光彩。如果你也热衷于打造高颜值的电脑桌面&#xff0c;那么&#xff0c;…

探索智能零售的未来商机与运营策略

探索智能零售的未来商机与运营策略 在智能零售的广阔图景中&#xff0c;无人售货机加盟赫然矗立为一股不可小觑的力量&#xff0c;预示着零售业态未来的转型与机遇。其核心优势多维展开&#xff0c;具体阐述如下&#xff1a; 1. **全天候服务**&#xff1a;无人售货机的运行跨…

优思学院:什么是DMADV模式?和DMAIC有何区别?

在现代企业管理中&#xff0c;质量管理是一项至关重要的工作。六西格玛管理法作为一种高效的质量管理方法&#xff0c;已在全球范围内得到了广泛应用。它不仅在制造业中发挥了巨大的作用&#xff0c;在服务业和其他行业中也同样表现出了强大的生命力。六西格玛管理法主要有两种…

SQL 语言:触发器

文章目录 基本概述创建触发器更改和删除触发器总结 基本概述 存储过程&#xff0c;类似于高阶语言的函数或者方法&#xff0c;包含SQL语句序列&#xff0c;是可复用的语句&#xff0c;保存在数据库中&#xff0c;在服务器中执行。特点是复用&#xff0c;提高了效率&#xff0c…

B3956 [GESP202403 三级] 字母求和

[GESP202403 三级] 字母求和 题目描述 小杨同学发明了一种新型密码&#xff0c;对于每一个小写英文字母&#xff0c;该小写字母代表了一个正整数&#xff0c;即该字母在字母顺序中的位置&#xff0c;例如字母 a 代表了正整数 1 1 1&#xff0c;字母 b 代表了正整数 2 2 2&a…

【30天精通Prometheus:一站式监控实战指南】第10天:blackbox_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们&#x1f44b;   欢迎加入【30天精通Prometheus】专栏&#xff01;&#x1f4da; 在这里&#xff0c;我们将探索Prometheus的强大功能&#xff0c;并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。&#x1f680;   Prometheus是云原生和DevOps的…

Java——执行流程

一、执行流程 1、示例 //第一个Java程序 public class Hello{public static void main(String[] args){System.out.println("Hello World!");} } 编译&#xff1a; 执行&#xff1a; 我们可以看到这里的是类名&#xff0c;而不是字节码文件名 Hello.class &#…

通过 coze 快速构建自己的智能体机器人

通过 coze 快速构建自己的智能体机器人 coze 的使用 一&#xff09;coze 是什么 「Coze 扣子」AI Bot 开发平台。任何用户都可以快速、低门槛地搭建自己的 Chatbot&#xff0c;且平台支持用户将其一键发布到飞书、微信公众号、豆包等渠道。 二&#xff09;coze 怎么注册 1. …