題目:
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。
邊界條件及異常:
陣列為空
思路:這題可以需要建立對任意兩個數自己的比較規則。然後根據這個規則進行排序即可。
如果是單位數,顯然小的在前。
如果是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。這個題目最直接的做法應該是先求出這個陣列中所有數字的全排列,然後把每個排列拼起來,最後求出拼起來的數字的最大值,這裡不過多敘述。根據排列組合的知識,...