生成 01 单调不减序列(快排应用)

来源:互联网 发布:web编程 编辑:程序博客网 时间:2024/06/17 18:14

给定一个01串(仅由‘ 0’或‘1’组成的字符串),现在想把这个数字串排序成“非递减”有序序列,请问至少需要多少次交换(任意两个位置交换)? 

输入描述:
输入数据第一行是一个正整数T(T<=100),表示有T组测试数据;接下来的T行,每行给出01串。数据保证——50%的字符串长度在[1,100 ]95%的字符串长度在[1,10000]100%的字符串长度在[1,1000000]


输出描述:
对于每组测试数据,请输出排成“非递减有序序列”的最小交换次数。每组输出占一行。

输入例子:
30110110

输出例子:
011


这道题的核心就是快速排序。

#include <string>#include <vector>#include <iostream>using namespace::std ;int main() {    int input ;        cin >> input ;        while ( input -- != 0 ) {        string tmp ;        cin >> tmp ;                int i = 0 ;        int j = tmp.size() - 1 ;        int count = 0 ;                while ( i - j <= 0 ) {            if ( tmp[i] == '0' ) ++ i ;            else if ( tmp[j] == '1' ) -- j ;            else {                char strTmp = tmp[i] ;                tmp[i] = tmp[j] ;                tmp[j] = strTmp ;                ++ i ;                -- j ;                ++ count ;            }        }        cout << count << endl ;    }    return 0 ;}


0 0
原创粉丝点击