网站建设待遇怎样/如何用html制作一个网页

网站建设待遇怎样,如何用html制作一个网页,商标设计网站是哪个,水果电子商务网站建设规划书思路 之前我们从选择排序,到选择排序的稳定性优化,到冒泡排序,到插入排序,到插入排序的提前截止时间,到希尔排序,虽然逐步一直都在优化,但是时间复杂度还是N得平方,力扣提交的结果一…

思路

之前我们从选择排序,到选择排序的稳定性优化,到冒泡排序,到插入排序,到插入排序的提前截止时间,到希尔排序,虽然逐步一直都在优化,但是时间复杂度还是N得平方,力扣提交的结果一直都是时间超时,因为时间复杂度并没有发生量级级别的减少,都是通过常规的优化思维,说白一点,就是没有创新的优化点,都是一步一步,一点一点优化,想方设法能能提高一点效率就提高一点。
那么从快速排序就是要开始坐飞机了往前冲了,直接打破一个量级的时间复杂度,从N的平方,到Nlogn,N就是二叉树的深度,logn就是每一层的时间复杂度。
为什么说快速排序是结合了二叉树前序递归思想的排序,后面我把快速排序的代码写出来吗,你对比一下二叉树的前序遍历,结构基本都是差不多的。
快速排序的解题思路就是:一般默认选择第一个数组元素作为起点,将第一个元素处理一下,使得左边的元素都小于它,右边的元素都大于它。第二就开最左右的数组继续处理,左边的数据选择当前第一个元素再左边找到位置是的左边都小于它,右边的都大于它,右边同理。你看这不就是二叉树的前序递归遍历吗?
接下来直接看代码,如果说你明白了在快排中使用到了二叉树的前序遍历思想,那你成功的解决了50的问题,剩下的50%是看你嫩不能解决数组中的一个点,如何找到它所在的位置,并且交换好数据吗,这个还需要主要的是一个数组的边界问题(如果数组题好好刷了,知道数组边界的处理,不混乱),那第二个难点也就不是什么难点,我还是讲一下找到中间位置的函数的思路吧,但是边界为就不讲了,这块儿还是有点技巧的,回头再来刷这个题目的时候再看吧

代码

class Solution {public int[] sortArray(int[] nums) {sort(nums,0,nums.length-1);return nums;}//定义一个递归遍历的函数sortvoid sort(int[] nums,int lo,int hi){if(lo > hi){return;}int p = partition(nums, lo, hi);sort(nums,lo,p-1);sort(nums,p+1,hi);}//定义一个找到位置的partition函数int partition(int[] nums, int lo, int hi){int pivot = nums[lo];// 关于区间的边界控制需格外小心,稍有不慎就会出错// 我这里把 i, j 定义为开区间,同时定义:// [lo, i) <= pivot;(j, hi] > pivot// 之后都要正确维护这个边界区间的定义int i = lo + 1, j = hi;// 当 i > j 时结束循环,以保证区间 [lo, hi] 都被覆盖while (i <= j) {while (i < hi && nums[i] <= pivot) {i++;// 此 while 结束时恰好 nums[i] > pivot}while (j > lo && nums[j] > pivot) {j--;// 此 while 结束时恰好 nums[j] <= pivot}if (i >= j) {break;}// 此时 [lo, i) <= pivot && (j, hi] > pivot// 交换 nums[j] 和 nums[i]swap(nums, i, j);// 此时 [lo, i] <= pivot && [j, hi] > pivot}// 最后将 pivot 放到合适的位置,即 pivot 左边元素较小,右边元素较大swap(nums, lo, j);return j;}// 原地交换数组中的两个元素private static void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}
}

在这里插入图片描述
这个运行后还是超出运行限制,到底是哪里还可以继续优化呢,肯定是可以的,我们先不纠结了,能和面试官谈到这里,说不定他还没有懂得深的。差不多了,优化的点我先提一下,就是在上面的基础上加了一个洗牌算法
直接看代码:

class Solution {public int[] sortArray(int[] nums) {// 为了避免出现耗时的极端情况,先随机打乱shuffle(nums);sort(nums,0,nums.length-1);return nums;}//定义一个递归遍历的函数sortvoid sort(int[] nums,int lo,int hi){if(lo > hi){return;}int p = partition(nums, lo, hi);sort(nums,lo,p-1);sort(nums,p+1,hi);}//定义一个找到位置的partition函数int partition(int[] nums, int lo, int hi){int pivot = nums[lo];// 关于区间的边界控制需格外小心,稍有不慎就会出错// 我这里把 i, j 定义为开区间,同时定义:// [lo, i) <= pivot;(j, hi] > pivot// 之后都要正确维护这个边界区间的定义int i = lo + 1, j = hi;// 当 i > j 时结束循环,以保证区间 [lo, hi] 都被覆盖while (i <= j) {while (i < hi && nums[i] <= pivot) {i++;// 此 while 结束时恰好 nums[i] > pivot}while (j > lo && nums[j] > pivot) {j--;// 此 while 结束时恰好 nums[j] <= pivot}if (i >= j) {break;}// 此时 [lo, i) <= pivot && (j, hi] > pivot// 交换 nums[j] 和 nums[i]swap(nums, i, j);// 此时 [lo, i] <= pivot && [j, hi] > pivot}// 最后将 pivot 放到合适的位置,即 pivot 左边元素较小,右边元素较大swap(nums, lo, j);return j;}// 原地交换数组中的两个元素private static void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}// 洗牌算法,将输入的数组随机打乱private static void shuffle(int[] nums) {Random rand = new Random();int n = nums.length;for (int i = 0 ; i < n; i++) {// 生成 [i, n - 1] 的随机数int r = i + rand.nextInt(n - i);swap(nums, i, r);}}
}

加上洗牌算法果然就通过了
在这里插入图片描述
接下来就继续分析一下,为什么加了一个洗牌算法就能提交通过呢,这里面到底优化什么?
这个问题要从快速排序的构造思想和极端情况两方面进行分析:
首先是上面我们提到的快速排序的构造思想就是二叉数的前序遍历构造思想,不是非常极端的二叉树情况,那么快速排序正常的复杂度就是NlogN,但是如果运气不好,出现了前序遍历后的二叉树呈现一边倒的趋势,这样的话,复杂度就又变成最坏的情况,N的平方了。所以提交才没有过。
之后我们又采用了洗牌算法,先把数组打乱,这样就不会出现极端情况了,至于洗牌算法是什么思想,怎么实现,后续慢慢道来。

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

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

相关文章

Redis 面试篇

Redis相关面试题 缓存三剑客 面试官&#xff1a;什么是缓存穿透 ? 怎么解决 ? 缓存穿透是指查询一个一定不存在的数据&#xff0c;如果从存储层查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到 DB 去查询&#xff0c;可能导致 DB 挂掉。这种情况…

群晖DS223 Docker搭建为知笔记

群晖DS223 Docker搭建为知笔记&#xff0c;打造你的专属知识宝库 一、引言 在数字化信息爆炸的时代&#xff0c;笔记软件成为了我们管理知识、记录灵感的得力助手。为知笔记&#xff0c;作为一款专注于工作笔记和团队协作的云笔记产品&#xff0c;以其丰富的功能和便捷的使用体…

Linux网络之数据链路层协议

目录 数据链路层 MAC地址与IP地址 数据帧 ARP协议 NAT技术 代理服务器 正向代理 反向代理 上期我们学习了网络层中的相关协议&#xff0c;为IP协议。IP协议通过报头中的目的IP地址告知了数据最终要传送的目的主机的IP地址&#xff0c;从而指引了数据在网络中的一步…

分类评价指标

基础概念解释 TP、TN、FP、FN 这里T是True&#xff0c;F是False&#xff0c;P为Positive&#xff0c;N为Negative TP&#xff1a;被模型正确地预测为正样本&#xff08;原本为正样本&#xff0c;预测为正样本&#xff09; TN&#xff1a;被模型正确地预测为负样本&#xff0…

江科大51单片机笔记【11】AT24C02(I2C总线)

一、存储器 1.介绍 RAM的特点是存储速度特别快&#xff0c;但是掉电会丢失&#xff1b;ROM的特点是存储速度特别慢&#xff0c;但是掉电不会丢失 SRAM是所有存储器最快的&#xff0c;一般用于电脑的CPU高速缓存&#xff0c;容量相对较少&#xff0c;成本较高&#xff1b;DRAM…

【C++指南】一文总结C++类和对象【中】

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C类和对象的语法知识。注意&#xff1a;在本章节中&#xff0c;小编会以Date类举例 &#x1f44d; 如果觉得…

文本转语音-音画适时推送rtsp并播放

文本语音 rtsp适时播放叫号系统的底层逻辑 发布Linux, unix socket 和window win32做为音频源的 python10下的(ffmpeg version 7.1) 可运行版本. 这两天在弄这个&#xff0c;前2篇是通过虚拟声卡&#xff0c;达到了最简单的一个逻辑&#xff0c;播放文本就从声卡发声&#xff0…

从0开始的操作系统手搓教程33:挂载我们的文件系统

目录 代码实现 添加到初始化上 上电看现象 挂载分区可能是一些朋友不理解的——实际上挂载就是将我们的文件系统封装好了的设备&#xff08;硬盘啊&#xff0c;SD卡啊&#xff0c;U盘啊等等&#xff09;&#xff0c;挂到我们的默认分区路径下。这样我们就能访问到了&#xff…

【图片批量转换合并PDF】多个文件夹的图片以文件夹为单位批量合并成一个PDF,基于wpf的实现方案

项目背景: 多个图片分布在不同文件夹,如何以文件夹为单位批量合并成一个PDF,还要保证文件夹里面图片大小和顺序 实现功能: 1、单张图片的转换PDF:一张图临时转一下 2、多张图片转换成PDF:多张图单独转成PDF 3、多级目录多张图转换成PDF:多级目录多张图单独转成多个PDF…

如何用Kimi生成PPT?秒出PPT更高效!

做PPT是不是总是让你头疼&#xff1f;&#x1f629; 快速制作出专业的PPT&#xff0c;今天我们要推荐两款超级好用的AI工具——Kimi 和 秒出PPT&#xff01;我们来看看哪一款更适合你吧&#xff01;&#x1f680; &#x1f947; Kimi&#xff1a;让PPT制作更轻松 Kimi的生成效…

从 MongoDB 到 TDengine,沃太能源实现 18 倍写入性能提升

导读 沃太能源是国内领先储能设备生产厂商&#xff0c;数十万储能终端遍布世界各地。此前使用 MongoDB 存储时序数据&#xff0c;但随着设备测点增加&#xff0c;MongoDB 在存储效率、写入性能、查询性能等方面暴露出短板。经过对比&#xff0c;沃太能源选择了专业时序数据库 …

数据库基本建表操作

1.登录数据库并创建数据库db_ck 创建完成后使用到我们创建的数据库。 2.创建表t_hero 根据hero属性包括&#xff08;id&#xff0c;name&#xff0c;nickname&#xff0c;age&#xff0c;gender&#xff0c;address&#xff0c;weapon&#xff0c;types&#xff09; 创建完…

QwQ-32B 开源!本地部署+微调教程来了

今天&#xff0c;通义千问开源了推理模型QwQ-32B QwQ-32B 在一系列基准测试中进行了评估&#xff0c;测试了数学推理、编程能力和通用能力。以下结果展示了 QwQ-32B 与其他领先模型的性能对比&#xff0c;包括 DeepSeek-R1-Distilled-Qwen-32B、DeepSeek-R1-Distilled-Llama-7…

如何利用 Excel 表格实现精准文件批量重命名教程

在处理大量文件时&#xff0c;有时需要根据特定规则对文件名进行调整。如果您的文件名和新名称之间存在一对多的关系&#xff0c;并且这种关系可以通过 Excel 表格来管理&#xff0c;那么使用“简鹿文件批量重命名”软件中的“匹配对应名称命名”功能将是一个高效的选择。接下来…

开关模式电源转换器 EMI/EMC 的集成仿真

介绍 在电力电子领域&#xff0c;电磁干扰 &#xff08;EMI&#xff09; 和电磁兼容性 &#xff08;EMC&#xff09; 问题可以决定设计的成败。开关模式电源转换器虽然高效且紧凑&#xff0c;但却是电磁噪声的常见来源&#xff0c;可能会对附近的组件和系统造成严重破坏。随着…

PostgreSQL_安装部署

一、Windows系统下安装 1.下载安装包 登录PostgreSQL: Downloads官网&#xff1a; 选择14.12版本&#xff0c;点击下载&#xff1a; 2.安装PostgrSQL14.12 双击exe安装包程序&#xff0c;准备安装&#xff1a; 选择安装路径&#xff1a; 选择想安装的工具&#xff1a; 选择数…

蓝桥杯真题0团建dfs+哈希表/邻接表

dfs邻接表储存或者哈希表的运用&#xff0c;考察我们对数据的存储 本题核心就是在求从根节点开始的两棵树相同的最长序列&#xff0c;首先确定用dfs进行深搜&#xff0c;对于节点的形式可以用邻接表&#xff0c;邻接矩阵&#xff0c;哈希表来进行存储数据。下面看代码 邻接表 …

使用 AIStor、MLflow 和 KServe 将模型部署到 Kubernetes

在之前几篇关于 MLOps 工具的文章中&#xff0c;我展示了有多少流行的 MLOps 工具跟踪与模型训练实验相关的指标。我还展示了他们如何使用 MinIO 来存储作为模型训练管道一部分的非结构化数据。但是&#xff0c;一个好的 MLOps 工具应该做的不仅仅是管理您的实验、数据集和模型…

【js逆向】

地址&#xff1a;aHR0cHM6Ly93d3cud2VpYm90b3AuY24vMi4wLw f12进入 debugger&#xff0c;过debugger 查看预览数据 全局搜索 请求网址中的 api.weibotop.cn 在下方疑似找到了加密和解密的函数 断点调试 控制台输出 那个n就是 常见的 cryptoJs库 const cryptoJs require(cry…

deepseek在pycharm中的配置和简单应用

对于最常用的调试python脚本开发环境pycharm&#xff0c;如何接入deepseek是我们窥探ai代码编写的第一步&#xff0c;熟悉起来总没坏处。 1、官网安装pycharm社区版&#xff08;免费&#xff09;&#xff0c;如果需要安装专业版&#xff0c;需要另外找破解码。 2、安装Ollama…