面試題37 把陣列排成最小的數

2021-07-09 06:04:35 字數 1161 閱讀 4403

題目:

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。

邊界條件及異常:

陣列為空

思路:這題可以需要建立對任意兩個數自己的比較規則。然後根據這個規則進行排序即可。

如果是單位數,顯然小的在前。

如果是32和321,結合後有32321和32132兩種結果,比較這兩種結果即可。

在程式中先將整數轉為字串,在進行比較與合併更方便。

比較規則確定後,用快速排序即可。

時間複雜度:o(nlgn)

#include #include #include #include #include #include #include //for hashtable

#include #include #include using namespace std;

const int maxnumberlength = 10;

char *strcombine1 = new char[maxnumberlength * 2 + 1];

char *strcombine2 = new char[maxnumberlength * 2 + 1];

int mycompare(const void *x, const void *y) //qsort要求此處為void

void printminnumber(vectornums)

//sort(strnumbers.begin(), strnumbers.end(), mycompare);

qsort(strnumbers, size, sizeof(char*), mycompare); //注意比較sort和qsort的區別

for (int i = 0; i < size; ++i)

cout << strnumbers[i];

cout << endl;

for (int i = 0; i < size; ++i)

delete strnumbers[i];

delete strnumbers;

}int main()

; vectornums(arr, arr + 3);

printminnumber(nums);

return 0;

}

面試題33 把陣列排成最小的數

題目 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數。列印能拼接處的所有數字鐘最小的乙個。例如輸入陣列,則列印出這3個數字能排成的最兇啊數字321323.思路 1,傳統 陣列全排列,再排序 2,定義排序規則,將整數轉化成字元陣列,兩個字元陣列比較大小的比較函式要重新定義,a b 與 b a ...

面試題33 把陣列排成最小的數

問題描述 輸入乙個正整數陣列,將它們連線起來排成乙個數,輸出能排出的所有數字中最小的乙個。例如輸入陣列,則輸出這兩個能排成的最小數字32132。請給出解決問題的演算法,並證明該演算法。思路 先將整數陣列轉為字串陣列,然後字串陣列進行排序,最後依次輸出字串陣列即可。這裡注意的是字串的比較函式需要重新定...

面試題 把陣列排成最小的數(C )

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則打出這3個數字能排成的最小數字321323。這個題目最直接的做法應該是先求出這個陣列中所有數字的全排列,然後把每個排列拼起來,最後求出拼起來的數字的最大值,這裡不過多敘述。根據排列組合的知識,...