/******************************優(yōu)酷面試題:整形數(shù)組重組,求最小值。題目:含有N個(gè)元素的整形數(shù)組,將這個(gè)n個(gè)元素重新組合,求出最小的數(shù),如【321,3,32】,最小的數(shù)為321323*********************************//***********************思想:1.將整數(shù)數(shù)組轉(zhuǎn)化為字符串?dāng)?shù)組(避免組合后超過最大整數(shù)范圍)2.對(duì)字符串?dāng)?shù)組進(jìn)行冒泡排序(可以采用快速排序)比較原則是: num[ii]+num[ii+1]>num[ii+1]+num[ii](加號(hào)表示字符串的拼接) 則交換num[ii]+num[ii+1]<num[ii+1]+num[ii] 不交換3.最后排序的數(shù)組按照順序組合后即是最小的組合數(shù)。測試用例:1.[321,3,32]2.[12,1212,2,13]************************/string reArrangeInteger(vector<int> nums){ if (nums.size()<0) { return "0"; } vector<string> stringNums; //轉(zhuǎn)換成字符串?dāng)?shù)組 for (int ii = 0; ii < nums.size(); ii++) { char buff[10]; _itoa_s(nums[ii], buff, 10); stringNums.push_back(buff); } //冒泡排序 for (int ii = 0; ii < stringNums.size(); ii++) { for (int jj = stringNums.size() - 1; jj > ii; jj--) { string num1 = stringNums[jj - 1] + stringNums[jj]; string num2 = stringNums[jj] + stringNums[jj - 1]; if (num1.compare(num2)>0) { //交換 string temp = stringNums[jj - 1]; stringNums[jj - 1] = stringNums[jj]; stringNums[jj] = temp; } } } string result; for (int ii = 0; ii < stringNums.size(); ii++) { result += stringNums[ii]; } return result; }
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注