zoukankan      html  css  js  c++  java
  • 【转】荷兰国旗问题 三指针排序

    方法一: 一次遍历
    直觉

    本问题被称为 荷兰国旗问题
    ,最初由 Edsger W. Dijkstra提出。
    其主要思想是给每个数字设定一种颜色,并按照荷兰国旗颜色的顺序进行调整。

     

    我们用三个指针(p0, p2 和curr)来分别追踪0的最右边界,2的最左边界和当前考虑的元素。

     

    本解法的思路是沿着数组移动 curr 指针,若nums[curr] = 0,则将其与 nums[p0]互换;若 nums[curr] = 2 ,则与 nums[p2]互换。

    算法

    初始化0的最右边界:p0 = 0。在整个算法执行过程中 nums[idx < p0] = 0.

    初始化2的最左边界 :p2 = n - 1。在整个算法执行过程中 nums[idx > p2] = 2.

    初始化当前考虑的元素序号 :curr = 0.

    While curr <= p2 :

    若 nums[curr] = 0 :交换第 curr个 和 第p0个 元素,并将指针都向右移。

    若 nums[curr] = 2 :交换第 curr个和第 p2个元素,并将 p2指针左移 。

    若 nums[curr] = 1 :将指针curr右移。

    实现

    复杂度分析

    时间复杂度 :由于对长度 NN的数组进行了一次遍历,时间复杂度为O(N)O(N) 。

    空间复杂度 :由于只使用了常数空间,空间复杂度为O(1)O(1) 。

    作者:LeetCode
    链接:https://leetcode-cn.com/problems/sort-colors/solution/yan-se-fen-lei-by-leetcode/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    小结:ES7——async和await初识
    如何抽离、引用公共部分页面
    数据处理:高德、百度经纬度坐标的相互转化
    mock数据的基础使用
    express随笔
    ES6学习基础
    初学node.js
    ajax基础
    ajax的几个面试题
    (转)认识原型对象和原型链
  • 原文地址:https://www.cnblogs.com/lau1997/p/12740960.html
Copyright © 2011-2022 走看看