待字閨中之構造最大數分析
阿新 • • 發佈:2017-06-03
stream sprint amp gnu i++ += 最大 str char
給定僅僅包括正數的數組,給出一個方法,將數組中的數拼接起來,得到的數,是最大的。 比如: [4, 94, 9, 14, 1] 拼接之後,所得最大數為:9944141
分析
我們能夠將兩個數字,作為一個總體。進行比較。然後一次排序,就得到了結果。給定樣例:5,54,56
比較5和54,實際上就是比較545和554哪個大
比較5和56,實際上就是比較556和565哪個大
比較54和56。實際上就是比較5456和5654哪個大
那我們對快排程序做一下變化,當兩個數字a和b進行比較時,比較的是ab和ba兩個數字的大小就可以。
僅僅是比較發生了變化。剩下的和快排都是一樣的。為了防止溢出。我們把兩個數字放到字符串中進行比較。詳細代碼例如以下:
char num1[30],num2[30]; bool cmp(int value1,int value2) { char a[15],b[15]; sprintf(a,"%d",value1); sprintf(b,"%d",value2); strcpy(num1,a);//把兩個數連接起來放到數組中進行比較 strcat(num1,b); strcpy(num2,b); strcat(num2,a); int res = strcmp(num1,num2); if(res >= 0)return true; return false; } string MakeBigNum(vector<int>& data) { int length = data.size(),i; if(length <= 0)return NULL; sort(data.begin(),data.end(),cmp);//進行快排 string res = ""; for(i=0;i<length;i++) { stringstream ss; ss << data[i]; res += ss.str(); } return res; }
待字閨中之構造最大數分析