剑指Offer----扩展:0-1交换

来源:互联网 发布:python实例教程 编辑:程序博客网 时间:2024/06/05 22:57

问题描述:

把一个0-1串(只包含0和1的串)进行排序,你可以交换任意两个位置,使所有的0在前边,所有的1在后边,问最少交换的次数?


方法分析:两个指针,分别指向头和尾,当头指向1,尾指向0的时候,进行交换,直至两个指针相遇!


#include<stdio.h>#include<stdlib.h>#include<string.h>int SwapTime(char *arr, int length){if (arr == NULL || length <= 1)return -1;int count = 0;for (int i = 0, j = length; i < j; ++i, --j){while (arr[i] != '1' && i < j)++i;while (arr[j] != '0' && i < j)--j;if (i < j)count++;}return count;}void test1(){char *str = "11110000";printf("Changed %d times.\n", SwapTime(str, strlen(str)));}void test2(){char *str = "111";printf("Changed %d times.\n", SwapTime(str, strlen(str)));}void test3(){char *str = "10011001";printf("Changed %d times.\n", SwapTime(str, strlen(str)));}int main(){test1();test2();test3();printf("%s  %s\n", __DATE__, __TIME__);system("pause");return 0;}

运行结果:

Changed 4 times.Changed 0 times.Changed 2 times.Aug 25 2016  16:51:32请按任意键继续. . .


注意:虽然我们的程序中嵌套了两层循环,但是,由于都是单向递增或递减的,因此该算法仍是线性的!

0 0
原创粉丝点击