当前位置: 首页> 娱乐> 影视 > 天津软件优化公司排名前十_快速网站轻松排名哪家好_营销咨询顾问_软文广告300字范文

天津软件优化公司排名前十_快速网站轻松排名哪家好_营销咨询顾问_软文广告300字范文

时间:2025/8/7 16:41:45来源:https://blog.csdn.net/qq_46030794/article/details/146773465 浏览次数:0次
天津软件优化公司排名前十_快速网站轻松排名哪家好_营销咨询顾问_软文广告300字范文

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;}}}
}

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

关键字:天津软件优化公司排名前十_快速网站轻松排名哪家好_营销咨询顾问_软文广告300字范文

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: