LeetCode 热题 100 JavaScript--75. 颜色分类

news/2024/12/23 2:27:07/

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

必须在不使用库内置的 sort 函数的情况下解决这个问题。

示例 1:

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]
示例 2:

输入:nums = [2,0,1]
输出:[0,1,2]

提示:

n == nums.length
1 <= n <= 300
nums[i] 为 0、1 或 2

进阶:

你能想出一个仅使用常数空间的一趟扫描算法吗?

var swamp = function(nums,i,j){var temp = nums[i]nums[i] = nums[j]nums[j] = temp
} 
var sortColors = function(nums) {var left = 0,right = nums.length - 1var current = 0while(current<=right){if(nums[current]==0){swamp(nums,current,left)left++current++}else if(nums[current]==2){swamp(nums,current,right)right --// current++}else{current++}// if(nums[current]==1){//     current++// }}return nums};

2、冒泡排序

var sortColors = function(nums) {for(var i=0;i<nums.length-1;i++){for(var j =i+1;j<nums.length;j++){if(nums[i]>nums[j]){var temp = nums[i]nums[i] = nums[j]nums[j] = temp}}}return nums};

3、归并排序

var sortColors = function(nums) {mergeSort(nums, 0, nums.length - 1);return nums
};function mergeSort(nums, left, right) {if (left < right) {const mid = Math.floor((left + right) / 2);mergeSort(nums, left, mid);    // 对左半部分进行归并排序mergeSort(nums, mid + 1, right); // 对右半部分进行归并排序merge(nums, left, mid, right);   // 合并两个排好序的子数组}
}function merge(nums, left, mid, right) {const temp = new Array(right - left + 1);let i = left;let j = mid + 1;let k = 0;while (i <= mid && j <= right) {if (nums[i] <= nums[j]) {temp[k++] = nums[i++];} else {temp[k++] = nums[j++];}}while (i <= mid) {temp[k++] = nums[i++];}while (j <= right) {temp[k++] = nums[j++];}for (let m = 0; m < temp.length; m++) {nums[left + m] = temp[m];}
}

// 4、快速排序

var sortColors = function(nums) {quickSort(nums, 0, nums.length - 1);return nums
};
function quickSort(nums,left,right){if(left<right){var l = left,r = rightvar key = nums[l]while(l<r){while(l<r&&nums[r]>key){r--}if(l<r){nums[l++] = nums[r]}while(l<r&&nums[l]<key){l++}if(l<r){nums[r--] = nums[l]}}nums[l] = keyquickSort(nums,left,l-1)quickSort(nums,l+1,right)// if(l-1>left){//     quickSort(nums,left,l-1)// }// if(l+1<right){//     quickSort(nums,l+1,right)// }}
}

http://www.ppmy.cn/news/1041981.html

相关文章

深入理解高并发编程 - ScheduledThreadPoolExecutor 与 Timer

ScheduledThreadPoolExecutor 和 Timer 都用于执行定时任务&#xff0c;但在功能和用法上有一些区别。下面解释这些区别&#xff0c;并提供一些使用案例来说明它们的应用场景。 区别&#xff1a; 线程管理&#xff1a; ScheduledThreadPoolExecutor 使用线程池来管理任务执行…

innodb的锁

一致性锁定读和一致性非锁定读 Read Committed和Repetable Read级别下采用MVCC 实现非锁定读 但在一些情况下&#xff0c;要使用加锁来保障数据的逻辑一致性 自增列 锁的算法 唯一值 MySQL 中关于gap lock / next-key lock 的一个问题_呜呜呜啦啦啦的博客-CSDN博客 RR可以通过…

Nginx 异步非阻塞事件处理机制

Nginx 是一个广泛使用的 Web 服务器和反向代理服务器&#xff0c;它采用异步非阻塞事件处理机制来实现高性能和高并发能力。以下是关于 Nginx 异步非阻塞事件处理机制的简要描述&#xff1a; 目的&#xff1a;Nginx 的设计目标之一是提供高性能、高并发的网络服务。为了实现这样…

角色入门02----动画蓝图

使用UE4的小白人动画&#xff0c;首先将它动画资产重定向。先ue4转ue5小银人&#xff0c;在把转换后的动画ue5转ue4给这个低模人物就动画就不会很鬼畜。 进入动画创建混合空间1D,这相当于可以组合很多动画 在跑步的混合空间里设置横坐标为Speed&#xff0c;最大值为400&#xf…

一篇学会软硬链接|快捷方式|操作系统|centos7

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/categ…

自动驾驶卡车量产-第一章-用户需求

1、中国干线物流行业现状 万亿级市场&#xff0c;规模巨大。由中重卡承运的干线运输占到整体公路货运市场的82%&#xff0c;全国中重卡保有量约730 万台1&#xff0c;市场规模达4.6 万亿元1&#xff0c;体量全球第一&#xff0c;超过同城物流及乘用出租市场规模之和。同样&…

Stable Diffusion基础:ControlNet之图片高仿效果

今天继续给大家分享AI绘画中 ControlNet 的强大功能&#xff0c;本次的主角是 Reference&#xff0c;它可以将参照图片的风格迁移到新生成的图片中&#xff0c;这句话理解起来很困难&#xff0c;我们将通过几个实例来加深体会&#xff0c;比如照片转二次元风格、名画改造、AI减…

红宝石阅读笔记--第八章 对象、类与面向对象编程

我只是以当前的认知去看这本书&#xff0c;下面是我觉得有必要记录的点&#xff0c;也算是自己对每一章节内容的浓缩总结&#xff01; 其实js也可以实现java里面的接口、抽象等面向对象方式&#xff0c;然后在执行代码的时候进行校验&#xff0c;如果担心这种运行时校验消耗性…