新浪博客网站,做门户网站啥意思,网站后台百度统计图如何做的,网站开发asp.net介绍
Hi 大家好。我是程序员库里#xff0c;今天新开一个前端算法专栏。
接下来会分类给大家分享常考算法题目。
很多朋友也是看着这套系列算法拿到很多offer#xff01;所以也是想分享给更多朋友#xff0c;帮助到有需要的朋友。 分类
数组-三路快排
题目
75. 颜色分…介绍
Hi 大家好。我是程序员库里今天新开一个前端算法专栏。
接下来会分类给大家分享常考算法题目。
很多朋友也是看着这套系列算法拿到很多offer所以也是想分享给更多朋友帮助到有需要的朋友。 分类
数组-三路快排
题目
75. 颜色分类
给定一个包含红色、白色和蓝色、共 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]解释
1.定义一个变量zero初始值为-1zero变量用来表示0…zero区间全部放0
2.定义一个变量two初始值为数组的长度two变量用来表示two…n-1区间全部放2
3.zero1…n-1区间全部放1这样数组中就变成了0…1…2
4.开始遍历数组条件是当i小于数组长度的时候
5.如果遍历的当前元素是1只把i向右移动一位即i。因为 1是在数组的中间所以不做其他操作。
6.如果遍历的当前元素是2先将变量two向左移动一位腾出一个位置也就是two–。然后将当前的元素2和two所在的位置交换一下位置此时这个2就移动到了右边这个时候不能将 i 向右移动一位需要继续判断 当前这个元素是否为0
7.如果遍历的当前元素是0先将zero向右移动一位腾出一个位置也就是zero。然后将当前的元素0和zero所在的位置交换一下位置此时这个0就移动到了左边。然后继续遍历即i。
8.遍历完一遍后所有0就到了左边所有2就到了右边所有1就到了中间。即完成了数组排序。
代码
/*** param {number[]} nums* return {void} Do not return anything, modify nums in-place instead.*/var sortColors function(nums) {let zero -1;// [0...zero] 为0弄成无效区间let two nums.length;// [two...n-1] 为2弄成无效区间for(let i 0;itwo;){if(nums[i] 1){i}else if(nums[i] 2){two--[nums[i],nums[two]] [nums[two],nums[i]]}else if(nums[i] 0){zero[nums[i],nums[zero]] [nums[zero],nums[i]]i}}return nums;
};