2015筆試上機題 求01串的最小交換次數

2021-07-02 01:09:54 字數 891 閱讀 5332

題目描述:

給定乙個01串(僅由 『0』或『1』組成的字串),現在把這個數字串排序成「非遞減系列」,請問至少需要多少次交換(任意兩個位置交換)?

input

輸入資料第一行是乙個正整數t(t<100),表示有t組測試資料;

接下來的t行,每行給出乙個01串。

資料報裝——

50%的字串長度在[1,100]之間;

95%的字串長度在[1,10000];

100%的字串長度在[1,1000000]

output對於每組測試資料,請輸出排成「非遞減有序序列」所需的最小交換次數。

每組輸出佔一行。

sample input:601

10110

00100

10010011

0100100

smaple output:01

1122

分析:此題要求將01串按照非遞減順序排序的最小交換次數,只能是在需要交換的時候才交換,也就是將所有0移到左邊,所有1放到右邊所需的最小交換次數。可以利用雙指標來處理。直接上c++**:

#include #include #include #include using namespace std;

int swapnum(string &s)

else //左指標所指元素為『1』

else /*若右邊元素為『1』,直接將右指標往左移,直到為『0』*/

rig--;

} } return num;

}int main(void)

system("pause");

return 0;

}

2015筆試記錄

0916去哪兒網 1.removeelement arr,index 這麼簡單的題竟然寫錯了,把splice方法的返回值記錯了,splice返回的是刪除的元素陣列!2.陣列亂序問題 以前看過fisher yates的洗牌演算法,所以有點思路,但還是有細節錯誤 math.random 的範圍是 0,1...

浪潮2020筆試 搬石頭,01串

沙灘按照線型擺放著n個大小不一的球形石頭,已知第i個石頭的半徑為ri,且不存在兩個石頭有相同的半徑。為了使石頭的擺放更加美觀,現要求擺放的石頭的半徑從左往右依次遞增。因此,需要對一些石頭進行移動,每次操作可以選擇乙個石頭,並把它放在剩下n 1個石頭在最左邊或最右邊。問最少需要操作多少次才能將這n個石...

360 2017筆試程式題

題意 給出乙個3x3矩陣,判斷該矩陣是否關於 2,2 對稱。題解 include include using namespace std char g 10 10 int main if ok printf yes n else printf no n return 0 題意 給出n,求出1到n中由...