美文网首页
算法—数组:荷兰国旗问题

算法—数组:荷兰国旗问题

作者: tomchan | 来源:发表于2015-10-06 23:34 被阅读887次

tips:本文章内容来自《程序员编程艺术:面试和算法心得》

给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。
要求:空间复杂度是O(1),且只能遍历一次字符串。

只是需要用到三个指针:一个前指针begin,一个中指针current,一个后指针end,current指针遍历整个数组序列,当

current指针所指元素为0时,与begin指针所指的元素交换,而后current++,begin++ ;

current指针所指元素为1时,不做任何交换(即球不动),而后current++ ;

current指针所指元素为2时,与end指针所指的元素交换,而后,current指针不动,end-- 。

参考代码:

/**

*荷兰国旗问题

*/

void helanguoqi (char* str,unsigned long length){

      if(NULL== str || 0== length)

                return;

      char* strBegin = str;

      char* strCurrent = str;

      char* strEnd = str+length-1;

      while(strCurrent < strEnd) {

              if('R' == *strCurrent) {

                   swap(*strBegin, *strCurrent);

                   strBegin++;

                   strCurrent++;//仔细想想为什么这里可以++

               }elseif('G' == *strCurrent){

                        strCurrent++;

               }else{ 

                        swap(*strCurrent, *strEnd);

                        strEnd--;

 }

相关文章

  • 算法—数组:荷兰国旗问题

    tips:本文章内容来自《程序员编程艺术:面试和算法心得》给定一个字符串里面只有"R" "G" "B" 三个字符,...

  • 【数组】--荷兰国旗问题

    问题:现有红,白,蓝三个不同颜色的小球,乱序排列在一起,请重新排列这些小球,使得红白蓝三色的同颜色球在一起。红白蓝...

  • [算法题] 荷兰国旗问题

    1. 问题描述 荷兰国旗是由红白蓝3种颜色的条纹拼接而成,如下图所示: 假设这样的条纹有多条,且各种颜色的数量不一...

  • 算法之荷兰国旗问题

    题目一:给定一个数组arr,和一个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组的右边。要...

  • 数据结构与算法:荷兰国旗问题

    荷兰国旗 荷兰国旗问题:简单来说就是,我们以一个数num作为基准,将一个数组划分为左侧为小于num的部分,右侧为大...

  • sort-colors

    荷兰国旗问题

  • 荷兰国旗问题

    给定一个数组,元素只有三种取值:0, 1, 2。分别代表三种颜色红白蓝。设计函数调整数组,使得数组按照0,1,2 ...

  • 荷兰国旗问题

    荷兰国旗问题:给定一个数num,将数组中划分成3部分,小于num的部分,等于num的部分,大于num的部分 例题:...

  • 荷兰国旗问题

    1.荷兰国旗问题 传入num 数组中大于num的数放左边 小于num的数放右边 等于num的数 放中间 1....

  • 荷兰国旗问题

    荷兰国旗问题 1、问题 荷兰国旗是由红白蓝3种颜色的条纹拼接而成,如下图所示: 假设这样的条纹有多条,且各种颜色的...

网友评论

      本文标题:算法—数组:荷兰国旗问题

      本文链接:https://www.haomeiwen.com/subject/otxncttx.html