Leetcode 75 Sort colors

题意:荷兰国旗问题,给一个数组[0,0,2,1,0],构造成[0,0,0,1,2]的形式,分成三块

https://leetcode.com/problems/sort-colors/description/

题解:

在任意时刻,i 左边的数都是 0,k 右边的数都是 2,而 i 到 j 之间的数都是 1。

想象有三个指针, i , j , k i, j, k i,j,k 维护 [ 0 , i ) [0,i) [0,i)为0,维护$[i,j)为1,[j, nums.size()]为2

想象有三个指针在动,i代表起始位置,k代表末尾位置,j遍历整个数组,移动j,当j的值指向的数字为0,的时候那么跟i交换,移动的过程中j >=i

cpp 复制代码
class Solution {
public:
    void sortColors(vector<int>& nums) {
        for(int i = 0, j = 0, k = nums.size()-1; k >= j;) {
            if(!nums[j]) {
                swap(nums[i++], nums[j++]);
            } else if( nums[j] == 2) {
                swap(nums[j],nums[k--]);
            } else j++;
        }
    }
};

时间复杂度 O ( n ) O(n) O(n)

空间复杂度 O ( 1 ) O(1) O(1)

相关推荐
微笑尅乐1 小时前
洗牌算法讲解——力扣384.打乱数组
算法·leetcode·职场和发展
天选之女wow1 小时前
【代码随想录算法训练营——Day48】单调栈——42.接雨水、84.柱状图中最大的矩形
算法·leetcode
仰泳的熊猫2 小时前
LeetCode:773. 滑动谜题
数据结构·c++·算法·leetcode
夏鹏今天学习了吗2 小时前
【LeetCode热题100(50/100)】岛屿数量
算法·leetcode·职场和发展
墨染点香2 小时前
LeetCode 刷题【134. 加油站】
算法·leetcode·职场和发展
Voyager_44 小时前
算法学习记录08——并归的应用(LeetCode[315])
学习·算法·leetcode
海梨花5 小时前
【力扣Hot100】刷题日记
算法·leetcode·1024程序员节
chonbw6 小时前
226.翻转二叉树
算法·leetcode
sprintzer7 小时前
10.16-10.25力扣计数刷题
算法·leetcode
Q741_14710 小时前
C++ 分治 快速排序优化 三指针快排 力扣 面试题 17.14. 最小K个数 题解 每日一题
c++·算法·leetcode·快排·topk问题