欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > [【C++算法】43.分治_快排_颜色分类(过渡)

[【C++算法】43.分治_快排_颜色分类(过渡)

2024/12/21 23:49:41 来源:https://blog.csdn.net/hlyd520/article/details/144509001  浏览:    关键词:[【C++算法】43.分治_快排_颜色分类(过渡)

文章目录

    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:


题目链接:

75. 颜色分类


题目描述:

6a25181416af4062e07010e7ce3dc3c8


解法

分治:就是分而治之

这题作为过渡,不使用分治。

6ca6431101cf65040db86fd9a640f9aa

解法:三指针

ef3231e28365ec989f12799b39dc1abd

6a499d309502e468f06c01f343c64359

bfac9b8577b2cc550bb6f45353131bfb


C++ 算法代码:

class Solution 
{public:void sortColors(vector<int>& nums) {int n = nums.size();// 初始化指针:// left 指向最后一个已知的 0 的下一个位置// right 指向第一个已知的 2 的前一个位置// i 是当前遍历的索引int left = -1, right = n, i = 0;while(i < right) // 当 i 小于 right 时继续遍历{// 如果当前元素是 0,将其与 left 指针指向的元素交换// 然后移动 left 和 i 指针if(nums[i] == 0) swap(nums[++left], nums[i++]);// 如果当前元素是 1,不需要交换,只需移动 i 指针else if(nums[i] == 1) i++;// 如果当前元素是 2,将其与 right 指针指向的元素交换// 然后移动 right 指针,但 i 指针不移动,因为交换过来的元素需要重新检查else swap(nums[--right], nums[i]);}}
};

版权声明:

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

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