常用的排序算法------练习4

1. 题目

在这里插入图片描述

2. 思路和题解

这道题是很经典的荷兰国旗问题,根据题目意思,要对这个数组按照颜色排序,而此时现在的红、白、蓝三个颜色分别对应0,1,2,因此可以想到使用冒泡排序对该数组进行排序。
代码如下:

class Solution {public void sortColors(int[] nums) {for (int i = 0; i < nums.length; i++) {for (int j = nums.length - 1; j > i; j--) {if (nums[j - 1] > nums[j]) {int temp = nums[j];nums[j] = nums[j - 1];nums[j - 1] = temp;}}}}
}

虽然这种方法可以通过,但是时间复杂度很高,然后查看了官方给出的题解,官方是先统计数组中0,1,2的个数,然后根据他们的数量,重写整个数组。初始化两个指针分别指向0和nums.length - 1,然后如果遇到0,就交换到数组的头部,遇到2,就交换到数组的尾部,当遍历的数组超过了右指针,则遍历结束。这一需要注意的一点是,当找到2时,需要不断地将其进行交换,直到新的nums[i]不为2,才能停止交换。
代码如下:

class Solution {public void sortColors(int[] nums) {int left = 0, right = nums.length - 1;for (int i = 0; i <= right; ++i) {while (i <= right && nums[i] == 2) {int temp = nums[i];nums[i] = nums[right];nums[right] = temp;--right;}if (nums[i] == 0) {int temp = nums[i];nums[i] = nums[left];nums[left] = temp;++left;}}}
}

用这种方法,时间复杂度就低很多了,也能更适用于普遍的情况。

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

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

相关文章

传统神经网络、CNN与RNN

在网络上找了很多关于深度学习的资料&#xff0c;也总结了一点小心得&#xff0c;于是就有了下面这篇文章。这里内容较为简单&#xff0c;适合初学者查看&#xff0c;所以大佬看到这里就可以走了。 话不多说&#xff0c;上图 #mermaid-svg-Z3k5YhiQ2o5AnvZE {font-family:&quo…

1371. 货币系统-dp背包问题

给定 V种货币&#xff08;单位&#xff1a;元&#xff09;&#xff0c;每种货币使用的次数不限。 不同种类的货币&#xff0c;面值可能是相同的。 现在&#xff0c;要你用这 V种货币凑出 N 元钱&#xff0c;请问共有多少种不同的凑法。 输入格式 第一行包含两个整数 V 和 N…

python和Java的区别

Python和Java是两种流行的编程语言&#xff0c;它们之间有一些重要的区别&#xff1a; 语法&#xff1a;Python是一种动态类型的脚本语言&#xff0c;语法简洁明了&#xff0c;通常使用缩进来表示代码块。Java是一种静态类型的编程语言&#xff0c;语法更为严格&#xff0c;需要…

正则化是什么?

正则化&#xff08;Regularization&#xff09;是机器学习中用于防止模型过拟合&#xff08;Overfitting&#xff09;的一种技术&#xff0c;通过在模型训练过程中引入额外的约束或惩罚项&#xff0c;降低模型的复杂度&#xff0c;从而提高其泛化能力&#xff08;即在未见数据上…

计算机网络——传输层(TCP)

传输层 在计算机网络中&#xff0c;传输层是将数据向上向下传输的一个重要的层面&#xff0c;其中传输层中有两个协议&#xff0c;TCP&#xff0c;UDP 这两个协议。 TCP 话不多说&#xff0c;我们直接来看协议报头。 源/目的端口号&#xff1a;表示数据从哪个进程来&#xff0…

界面控件DevExpress WinForms v25.1 - 人工智能(AI)方面全新升级

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

WinFrom真入门(1)——Windows窗体应用概念

窗体的基本结构 用Winform开发的桌面程序&#xff0c;是在Windows操作系统上运行的&#xff0c;这个不用多说。窗体&#xff08;Form&#xff09;的作用‌&#xff1a;窗体是用户交互的容器&#xff0c;承载按钮、文本框等控件&#xff0c;构成应用程序的界面‌。 在Windows操…

scss预处理器对比css的优点以及基本的使用

本文主要在vue中演示&#xff0c;scss的基本使用。安装命令 npm install sass sass-loader --save-dev 变量 SCSS 支持变量&#xff0c;可将常用的值&#xff08;如颜色、字体大小、间距等&#xff09;定义为变量&#xff0c;方便重复使用和统一修改。 <template><…

Postman 如何高效地转换时间戳?

在 Postman 中&#xff0c;时间戳的处理对于 API 请求和响应的调试和测试至关重要&#xff0c;正确处理时间戳可以确保数据的准确性和一致性&#xff0c;而 Moment 库和原生 JS 是两种常见的处理方式。此外&#xff0c;我们还将介绍 Apifox&#xff0c;它提供了更直观、更简便的…

iptables学习记录

一.四表 filter 表&#xff1a; 主要用于控制数据包的过滤&#xff0c;决定数据包是否允许进出及转发 。比如设置规则允许特定 IP 访问服务器的 SSH 端口&#xff08;22 端口&#xff09;&#xff0c;或禁止某些 IP 访问网站端口&#xff08;80 或 443 端口 &#xff09;。可作…

前端自动创建react项目脚手架

步骤&#xff1a;在终端窗口运行如下命令&#xff1a; npm create vitelatest 也可以指定 vite包 版本&#xff0c; 例如&#xff1a; npm create vite4.1.0 npm执行npm install 很慢 还出现证书问题 执行命令行:npm install -g create-vite npm error code UNABLE_TO_GET_IS…

[从零开始学习JAVA ] 了解线程池

前言&#xff1a; 在Java编程中&#xff0c;线程池是一个强大的工具&#xff0c;它能够管理和复用线程&#xff0c;提供高效的并发处理能力。通过线程池&#xff0c;我们可以有效地控制并发线程的数量&#xff0c;并降低线程创建和销毁的开销。本文将引导你深入了解Java中的线程…

Nginx — Nginx处理Web请求机制解析

一、Nginx请求默认页面资源 1、配置文件详解 修改端口号为8080并重启服务&#xff1a; 二、Nginx进程模型 1、nginx常用命令解析 master进程&#xff1a;主进程&#xff08;只有一个&#xff09; worker进程&#xff1a;工作进程&#xff08;可以有多个&#xff0c;默认只有一…

【C++标准IO库】字符串流

目录 一、字符串流概述 1.1 流的概念回顾 1.2 字符串流的定义和作用 二、istringstream 的使用 2.1 基本用法 2.2 常见应用场景 三、ostringstream 的使用 3.1 基本用法 3.2 常见应用场景 四、stringstream 的使用 4.1 基本用法 4.2 常见应用场景 五、字符串流的错…

C语言pthread库的线程休眠和唤醒的案例

一、代码如下 #include<stdio.h> #include<pthread.h> // 定义独占锁 pthread_mutex_t mutex; // 定义条件信号对象 pthread_cond_t condition; // 初始化函数 void init(){ int code pthread_mutex_init(&mutex, NULL); printf("共享锁初…

人脸照片比对 API 接口如何对接?

随着数字化程度加深&#xff0c;身份验证的重要性也日益凸显&#xff0c;它成为保障个人信息安全、维护交易秩序的关键环节。人脸照片比对 API 接口作为连接人脸比对技术与各类应用的桥梁&#xff0c;正发挥着越来越重要的作用&#xff0c;成为众多企业和开发者实现高效、安全身…

java学习笔记9——常用类

字符串相关的类&#xff1a; String 指向同一个地址可才相等 注意这个地方&#xff0c;两个person对象的name实际上指向的是同一个字符串常量池&#xff08;Tom&#xff09; String常用方法 总结&#xff1a; 1.string类的理解(以JDK8为例说明) 1.1 类的声明 public final cl…

Day 09

文章目录 指针数组指针和函数技术名词解释技术细节课堂笔记 指针数组 #include<stdio.h> int main() {int a[3] {0,1,2};//指针数组&#xff0c;它是数组&#xff0c;每个元素都是指针int *p[3];p[0] &a[0];p[0] a;p[1] &a[1];p[1] a1;p[2] &a[2];p[…

Nginx — Nginx安装证书模块(配置HTTPS和TCPS)

一、安装和编译证书模块 [rootmaster nginx]# wget https://nginx.org/download/nginx-1.25.3.tar.gz [rootmaster nginx]# tar -zxvf nginx-1.25.3.tar.gz [rootmaster nginx]# cd nginx-1.25.3 [rootmaster nginx]# ./configure --prefix/usr/local/nginx --with-http_stub_…

计算机网络 用deepseek帮助整理的复习资料(一)

### 计算机网络基础知识整理 --- #### **一、网络类型** 1. **局域网 (LAN)** - **定义**&#xff1a;覆盖小范围&#xff08;如家庭、教室、公司&#xff09;。 - **特点**&#xff1a;高带宽、低延迟&#xff0c;设备通过交换机互联。 - **示例**&#xff1…