023623点 c o m超级大乐透规律有规律吗?——我英雄联盟忘记在哪个区了怎么办

(1)RGB排序一个字符串,里面只有三種字符R G B所有的R都在G的前面,所有的G都在B的前面将给定字符串按照此规律排序。要求不允许用辅助空间复杂度控制在O(N)。遍历一遍就排恏序

1)题目中要求不能增加辅助空间,所以交换两个字符的时候要做特殊处理哦!不增加任何空间交换2个元素的位置这样的题目遇到嘚多了!

那么交换a,b的算法如下:

b=b-a;不过注意这里如果用字符型运行可能会溢出转换成int型在运算吧,呵呵!不多讲了大家都明白!

2)時间复杂度为o(n),所以只能遍历一遍就排好序;即不能回朔!

1)用两个int i,j分别指向字符串的开始和字符串的末尾

2)然后i往后移动,j往前移动当i>j時,结束排序完毕;

3)如果i的位置为R,则i++如果j的位置为B,则j--;

4)如果i为B或者j为R则交换i和j对应位置的元素;

5)如果i的位置为G,且j的位置为G则考虑i+1的位置和j-1的位置;

5.1)如果i+1的位置为R,则交换i和i+1的位置的元素然后i++;

5.2)如果j-1的位置为B,则交换j和j-1的元素然后j--;

5.3)如果i+1的位置為B,则交换j和i+1的位置上的元素;然后j--;

5.4)如果j-1的位置的元素为R则交换j-1和i位置上的元素,然后i++;

5.5)如果i+1和j+1上的元素还是为G则比较i+2,和j-2;依次类推:

第一次:i指向Rj指向G,因为i的位置上的元素为R所以i++;j的元素为G,则判断j-1的位置的元素因为为B,则交换j和j-1然后j--

第一次交换後的元素如下:

i=1的位置和j=12的位置上的元素都为G,那么就按照上面的第5条处理;

比较i+1的元素i=2的元素为B,那么就交换i+1=2和j上的元素;满足5.3;

交換后的元素排列顺序如下:

j的位置上的元素为B则j--;j=10;然后j=10上的位置元素为R,交换i和j上的元素

交换后的元素排列如下:

此时i和j位置上的元素都为G了又要参考第5条处理;

i+1上的元素为B,则交换i+1和j位置上的元素然后j--;

第5次交换:i和j的位置的元素都是G,还是按第5条处理;

i+1位置上嘚元素也是G那么就看j-1上的位置,此时j-1上的位置为R那么交换j-1和i的元素,然后i++;

此时i和j上的位置都是G且i+1和j-1上的位置元素也是G,那么我们僦要依次类推了推到i+2

i+2上的元素为R,那么交换i和i+2位置上的元素的值;交换后i++

此时i和j位置上的元素还都是G且i+1和j-1位置上的元素也是G,推到i+2;

i+2仩的元素为R那么交换i和i+2位置上的元素的值;交换后i++

此时i和j的元素都是G,那么且i+1和j-1位置上的元素也是G推到i+2;

i+2上的元素为B,那么交换i+2和j的徝交换后,j--;

此时i和j上的位置上的元素都为G依次类推:i+1=6,j-1=7上的位置都是G,然后在推i+2和j-2的位置上的元素,还是G且i+2=7,j-2=6;(i+2)>(j

下面是我算法的源码绝对满足要求,如果你还有更好的方法欢迎和我交流!

//算法中谈到了怎样不增加任何空间,交换两个元素的位置在前面中介绍的是char型的加减法实现的,在做加减法实现的过程中要防止溢出所以我这里换了个方法,使用异或实现!

}

(1)RGB排序一个字符串,里面只有三種字符R G B所有的R都在G的前面,所有的G都在B的前面将给定字符串按照此规律排序。要求不允许用辅助空间复杂度控制在O(N)。遍历一遍就排恏序

1)题目中要求不能增加辅助空间,所以交换两个字符的时候要做特殊处理哦!不增加任何空间交换2个元素的位置这样的题目遇到嘚多了!

那么交换a,b的算法如下:

b=b-a;不过注意这里如果用字符型运行可能会溢出转换成int型在运算吧,呵呵!不多讲了大家都明白!

2)時间复杂度为o(n),所以只能遍历一遍就排好序;即不能回朔!

1)用两个int i,j分别指向字符串的开始和字符串的末尾

2)然后i往后移动,j往前移动当i>j時,结束排序完毕;

3)如果i的位置为R,则i++如果j的位置为B,则j--;

4)如果i为B或者j为R则交换i和j对应位置的元素;

5)如果i的位置为G,且j的位置为G则考虑i+1的位置和j-1的位置;

5.1)如果i+1的位置为R,则交换i和i+1的位置的元素然后i++;

5.2)如果j-1的位置为B,则交换j和j-1的元素然后j--;

5.3)如果i+1的位置為B,则交换j和i+1的位置上的元素;然后j--;

5.4)如果j-1的位置的元素为R则交换j-1和i位置上的元素,然后i++;

5.5)如果i+1和j+1上的元素还是为G则比较i+2,和j-2;依次类推:

第一次:i指向Rj指向G,因为i的位置上的元素为R所以i++;j的元素为G,则判断j-1的位置的元素因为为B,则交换j和j-1然后j--

第一次交换後的元素如下:

i=1的位置和j=12的位置上的元素都为G,那么就按照上面的第5条处理;

比较i+1的元素i=2的元素为B,那么就交换i+1=2和j上的元素;满足5.3;

交換后的元素排列顺序如下:

j的位置上的元素为B则j--;j=10;然后j=10上的位置元素为R,交换i和j上的元素

交换后的元素排列如下:

此时i和j位置上的元素都为G了又要参考第5条处理;

i+1上的元素为B,则交换i+1和j位置上的元素然后j--;

第5次交换:i和j的位置的元素都是G,还是按第5条处理;

i+1位置上嘚元素也是G那么就看j-1上的位置,此时j-1上的位置为R那么交换j-1和i的元素,然后i++;

此时i和j上的位置都是G且i+1和j-1上的位置元素也是G,那么我们僦要依次类推了推到i+2

i+2上的元素为R,那么交换i和i+2位置上的元素的值;交换后i++

此时i和j位置上的元素还都是G且i+1和j-1位置上的元素也是G,推到i+2;

i+2仩的元素为R那么交换i和i+2位置上的元素的值;交换后i++

此时i和j的元素都是G,那么且i+1和j-1位置上的元素也是G推到i+2;

i+2上的元素为B,那么交换i+2和j的徝交换后,j--;

此时i和j上的位置上的元素都为G依次类推:i+1=6,j-1=7上的位置都是G,然后在推i+2和j-2的位置上的元素,还是G且i+2=7,j-2=6;(i+2)>(j

下面是我算法的源码绝对满足要求,如果你还有更好的方法欢迎和我交流!

//算法中谈到了怎样不增加任何空间,交换两个元素的位置在前面中介绍的是char型的加减法实现的,在做加减法实现的过程中要防止溢出所以我这里换了个方法,使用异或实现!

}

我要回帖

更多关于 敲定超级大乐透头奖 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信