算法篇-排序

快排

算法思想:每次找一个基数,然后对数组左右遍历,将小于基数的数据放到左边,大于基数的数放到右边,然后将基数左边,右边进行迭代再排序。
在这里插入图片描述

public static void quickSort(int[] nums, int left, int right) {
        if (left >= right) {
            return;
        }
		
		// 基准数字
        int base = nums[left];
        // 左右游标
        int low = left;
        int high = right;

        while (low < high) {
            while (low < high && nums[high] > base) {
                high--;
            }
            nums[low] = nums[high];

            while (low < high && nums[low] <= base) {
                low++;
            }
            nums[high] = nums[low];
        }
        nums[low] = base;
        quickSort(nums, left, low - 1);
        quickSort(nums, low + 1, right);
    }

归并排序

归并切实也就听着比较难,其实算法思想还是比较简单的。
算法思想:归并其实就是分治,最终将两个单数进行排序,然后再对有序的数组进行合并即可。两个有序的数组合并,需要开辟额外的空间,双指针遍历两个有序的数组,每次将其中最大的数,放入结果中。
在这里插入图片描述
代码:

public static void main(String[] args) {
        int[] nums = new int[]{8, 4, 5, 7, 1, 3, 6, 2};
        sort(nums, 0, nums.length - 1);
        System.out.println(Arrays.toString(nums));
    }

    public static void sort(int[] nums, int left, int right) {
        if (left >= right) {
            return;
        }
        // 分治
        int mid = (right + left) / 2;
        sort(nums, left, mid);
        sort(nums, mid + 1, right);

		// 合并
        merge(nums, left, mid, right);
    }

    public static void merge(int[] nums, int left, int mid, int right) {
        // 需要临时开辟空间
        int[] tmps = Arrays.copyOfRange(nums, left, right + 1);
        int i = left;
        int j = mid + 1;
        for (int k = left; k <= right; k++) {
            if (i > mid) {
                nums[k] = tmps[j - left];
                j++;
            } else if (j > right) {
                nums[k] = tmps[i - left];
                i++;
            } else if (tmps[i - left] < tmps[j - left]) {
                nums[k] = tmps[i - left];
                i++;
            } else {
                nums[k] = tmps[j - left];
                j++;
            }
        }

    }

双指针排序思想

笔试题中有很多有序的数组,然后根据有序的特性去做一些事情,比如下面这个题:
一个非递减数组[-4,-3,-2,-1,0,1,2,3,4,5],对每个元素进行平方,然后重新排序得到新的非递减数组。我们可以观察平方后的数组是什么?
解题思路:

  1. 平方运算后的数组[16,9,4,1,0,1,4,9,16,25]
  2. 我们观察这个数组有什么特点,两边大中间小
  3. 采用爽指针从左右遍历, 每次取最大的元素

代码:

public static void main(String[] args) {
        int[] nums = new int[]{-4,-3,-2,-1,0,1,2,3,4,5};
        System.out.println(Arrays.toString(nums));

        int l = 0;
        int r = nums.length - 1;
        int[] result = new int[nums.length];

        int i = r;
        while (i >= 0) {
            int left = nums[l] * nums[l];
            int right = nums[r] * nums[r];

            if (left < right) {
                result[i] = right;
                r--;
            } else {
                result[i] = left;
                l++;
            }
            i--;
        }
        System.out.println(Arrays.toString(result));
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

openeuler一个服务异常占用cpu的排查过程

1 环境 硬件环境&#xff1a;LS1046A arm64 系统环境&#xff1a;openEuler release 22.03 (LTS-SP1) Linux kernel 4.19.26 2 问题说明 我的硬件平台需要适配一下 openEuler release 22.03 (LTS-SP1) 但是目前只能使用原来硬件平台的内核&#xff0c;在适配的过程中…

phar反序列化及绕过

目录 一、什么是phar phar://伪协议格式&#xff1a; 二、phar结构 1.stub phar&#xff1a;文件标识。 格式为 xxx; *2、manifest&#xff1a;压缩文件属性等信息&#xff0c;以序列化存 3、contents&#xff1a;压缩文件的内容。 4、signature&#xff1a;签名&#…

开放式耳机哪个品牌质量比较好?五大公认性能之王推荐!

作为一名热爱音乐的DJ爱好者&#xff0c;我当然知道一款适合DJ使用的开放式耳机应该具备哪些特点。最近&#xff0c;我深入评测了几款热门开放式耳机&#xff0c;从音质、舒适度、耐用性到混音功能等方面进行了全面评估。今天&#xff0c;我想为大家分享我的评测结果&#xff0…

【jdk】jdk11 jdk17 jdk21的新特性

前言&#xff1a;按照博主的个人理解&#xff0c;一般来说 除了jdk8时代 说jdk8的新特性是特指jdk8这一个版本的特性&#xff0c;之后例如jdk11 jdk17新特性 都是泛特性 什么意思呢&#xff1f; 比如jdk11新特性&#xff0c;一般是指jdk9——jdk11 这一个泛版本的所有新特性&am…

机器学习第四十四周周报 SAMformer

文章目录 week44 SAMformer摘要Abstract1. 题目2. Abstract3. 网络架构3.1 问题提出3.2 微型示例3.3 SAMformer 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程 5. 结论6.代码复现小结参考文献 week44 SAMformer 摘要 本周阅读了题为SAMformer: Unlocking the Potential…

智谱AI GLM-4V-9B视觉大模型环境搭建推理

引子 最近在关注多模态大模型&#xff0c;之前4月份的时候关注过CogVLM&#xff08;CogVLM/CogAgent环境搭建&推理测试-CSDN博客&#xff09;。模型整体表现还不错&#xff0c;不过不支持中文。智谱AI刚刚开源了GLM-4大模型&#xff0c;套餐里面包含了GLM-4V-9B大模型&…

HTTP 状态码详解及使用场景

目录 1xx 信息性状态码2xx 成功状态码3xx 重定向状态码4xx 客户端错误状态码5xx 服务器错误状态码 HTTP思维导图连接&#xff1a;https://note.youdao.com/s/A7QHimm0 1xx 信息性状态码 100 Continue&#xff1a;表示客户端应继续发送请求的其余部分。 使用场景&#xff1a;客…

昇思25天学习打卡营第3天|数据集Dataset

一、简介&#xff1a; 数据是深度学习的基础&#xff0c;高质量的数据输入将在整个深度神经网络中起到积极作用。有一种说法是模型最终训练的结果&#xff0c;10%受到算法影响&#xff0c;剩下的90%都是由训练的数据质量决定。&#xff08;doge&#xff09; MindSpore提供基于…

公司怎么管理文档外发泄密?强化企业文档安全用迅软加密软件就行了!

一、文档加密软件原理 迅软DSE加密软件对各类需要加密的文件&#xff08;如&#xff1a;技术资料、商业数据、红头文件、会议纪要、机要文件、图纸、财务报表等&#xff09;进行加密。 使用加密算法对文件自动加密&#xff0c;只有拥有正确的解密密钥或密码的人才能打开文件&…

【uni-app学习手札】

uni-app&#xff08;vue3&#xff09;编写微信小程序 编写uni-app不必拘泥于HBuilder-X编辑器&#xff0c;可用vscode进行编写&#xff0c;在《微信开发者工具》中进行热加载预览&#xff0c; 主要记录使用uni-app过程中自我备忘一些api跟语法&#xff0c;方便以后编写查找使用…

OrangePi连接Wi-Fi步骤

下面介绍的是用终端命令行的方式配置WIFI&#xff1a; 首先输入以下命令用于扫描并查看周围的WiFi热点。也可以直接连接。 nmcli dev wifi之后会在终端打出周围所有可以连接的WiFi&#xff0c;按方向键上下可以查看显示更多&#xff0c;按q键退出。 然后同样使用nmcli命令连接…

如何修改外接移动硬盘的区号

- 问题介绍 当电脑自身内存不够使用的时候&#xff0c;使用外接硬盘扩展内存是一个不错的选择。但是当使用的外接硬盘数量过多的时候&#xff0c;会出现分配硬盘的区号变动的情况&#xff0c;这种情况下会极大的影响使用的体验情况。可以通过以下步骤手动调整恢复 - 配置 版本…

【CT】LeetCode手撕—143. 重排链表

目录 题目1- 思路2- 实现⭐143. 重排链表——题解思路 3- ACM 实现 题目 原题连接&#xff1a;143. 重排链表 1- 思路 模式识别&#xff1a;重排链表 ——> 逆向 ——> ① 找到中间节点 ——> ②逆置 mid.next 链表——> ③遍历 2- 实现 ⭐143. 重排链表——题解…

ELK Kibana搜索框模糊搜索包含不包含

默认是KQL,点击切换Lucene搜索&#xff0c;搜索日志中包含Exception关键字&#xff0c;不包含BizException、IllegalArgumentException、DATA_SYNC_EXCEPTION关键字的日志&#xff0c;如下&#xff1a; message: *Exception AND !(message : *BizException OR message : *Ille…

现代易货交易:重塑物品交换的新纪元

在数字时代的浪潮中&#xff0c;交易模式正在经历一场革命。其中&#xff0c;现代易货交易模式以其独特的魅力&#xff0c;逐渐在市场中崭露头角。这种交易模式不仅是对古老“以物换物”的复兴&#xff0c;更是对物品价值和交换方式的全新定义。 现代易货&#xff1a;物品交换的…

机器人系统工具箱的 Gazebo 模拟

Gazebo 联合仿真模块 机器人系统工具箱> Gazebo联合仿真模块库包含与仿真环境相关的 Simulink 模块。要查看该库&#xff0c;在 MATLAB 命令提示符下输入robotgazebolib。

张量 Tensor学习总结

张量 Tensor 张量是一种多线性函数&#xff0c;用于表示矢量、标量和其他张量之间的线性关系&#xff0c;其在n维空间内有n^r个分量&#xff0c;每个分量都是坐标的函数。张量在坐标变换时也会按照某些规则作线性变换&#xff0c;是一种特殊的数据结构&#xff0c;在MindSpore…

IDEA中SpringMVC的运行环境问题

文章目录 一、IEAD 清理缓存二、用阿里云和spring创建 SpringMVC 项目中 pom.xml 文件的区别 一、IEAD 清理缓存 springMVC 运行时存在一些之前运行过的缓存导致项目不能运行&#xff0c;可以试试清理缓存 二、用阿里云和spring创建 SpringMVC 项目中 pom.xml 文件的区别 以下…

容器之工具栏构件演示

代码; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window;window gtk_window_new(GTK_WINDO…

Meta-Llama-3-8B 部署

Meta-Llama-3-8B 模型文件地址 LLaMA-Factory 仓库地址 Download Ollama 环境准备 操作系统&#xff1a;Ubuntu 22.04.5 LTSAnaconda3&#xff1a;Miniconda3-latest-Linux-x86_64GPU&#xff1a; NVIDIA G…