青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

還沒想好
怎樣彌補荒廢的青春
posts - 2,comments - 2,trackbacks - 0
有兩個數組a,b,大小都為n,數組元素的值任意,無序;
要求:通過交換a,b中的元素,使數組a元素的和與數組b元素的和之間的差最小

據說要8分鐘內寫出代碼,我試了一下,整出思路都有幾分鐘了,代碼寫出來都快個把小時了,自認為也寫過那么多年的程序,也不至于那么弱爆吧,難道傳說中的神人就這么厲害?
代碼貼下面,高手指點:
  1 
  2 /*
  3 有兩個數組a,b,大小都為n,數組元素的值任意,無序;
  4 要求:通過交換a,b中的元素,使數組a元素的和與數組b元素的和之間的差最小
  5 */
  6 
  7 /*
  8 算法思想就是先把兩堆數排序,然后給結果數組分配,當一邊有一個最大的數時,
  9 應該給它配一個最小的數,所以一次取兩個數。當給A組分配最大MAX和最小的MIN后,
 10 再在剩下未分配的數里取出最大和最小的數分配給B,直到分完為止。
 11 這個算法并不能保證最優解,正確算法應該使用動態規劃法,以后補上正解的代碼。
 12 */
 13 
 14 //從剩余的數厘米找出最大的那個。
 15 //a,b分別是數組地址,offa和offb是偏移量,是值結果參數。
 16 int get_max(int *a, int *offa, int *b, int *offb)
 17 {
 18     if(*offa == 0)
 19     {
 20         (*offb)--;
 21         return b[*offb+1];
 22     }
 23     else if(*offb == 0)
 24     {
 25         (*offa)--;
 26         return a[*offa+1];
 27     }
 28     
 29     if(a[*offa] > b[*offb])
 30     {
 31         (*offa)--;
 32         return a[*offa+1];
 33     }else{
 34         (*offb)--;
 35         return b[*offb+1];
 36     }
 37 }
 38 
 39 //類似get_max,是取最小的數。
 40 //n是數組大小。
 41 int get_min(int *a, int *offa, int *b, int *offb, int n)
 42 {
 43     if(*offa == n)
 44     {
 45         (*offb)++;
 46         return a[*offb-1];
 47     }
 48     else if(*offb == n)
 49     {
 50         (*offa)++;
 51         return a[*offa-1];
 52     }
 53     
 54     if(a[*offa] < b[*offb])
 55     {
 56         (*offa)++;
 57         return a[*offa-1];
 58     }else{
 59         (*offb)++;
 60         return a[*offb-1];
 61     }
 62 }
 63 
 64 //這個就不解釋了吧
 65 void swap_i(int *a, int *b) 
 66 {
 67     int t = *a;
 68     *= *b;
 69     *= t;
 70 }
 71 
 72 //主算法,輸入是a,b兩個數組即長度n
 73 //返回交互后兩組數據和的差。
 74 //每次從兩組數據里取最大和最小的組合起來,放到一邊,次大和次小的放到另一邊
 75 //實際上這個算法不能保證找到最優解,應該使用動態規劃法來求最優解。
 76 int swap_x(int *a, int *b, int n)
 77 {
 78     int sa, sb, la, lb, *na, *nb, idx, delta, d;
 79     na = new int[n];
 80     nb = new int[n];
 81     idx = 0;
 82     delta = 0;
 83     sa = sb = 0;
 84     la = lb = n - 1;
 85     
 86     sort(a, a+n);
 87     sort(b, b+n);
 88     
 89     while(idx < n-1)
 90     {
 91         //先給A和B一邊分配一個最大的
 92         na[idx] = get_max(a, &la, b, &lb);
 93         nb[idx] = get_max(a, &la, b, &lb);
 94         d = na[idx] - nb[idx];
 95         idx++;
 96         //然后一邊分配一個最小的
 97         na[idx] = get_min(a, &la, b, &lb, n);
 98         nb[idx] = get_min(a, &la, b, &lb, n);
 99         d += na[idx] - nb[idx];
100         idx++;
101         
102         if(delta > 0 && d > 0)
103         { //A這邊總和比B的總和大了,然后新的數又是A這邊大,則需要交換
104             swap_i(na+idx, nb+idx);
105             swap_i(na+idx-1, nb+idx-1);
106             d = -d;
107         }
108         delta += d;
109     }
110     
111     //n為奇數,剩下兩個數。
112     if(idx == n-1)
113     {
114         if(delta > 0)
115         { //A總和大,把剩下最后一個小的給A
116             na[idx] = get_min(a, &la, b, &lb, n);
117             nb[idx] = get_max(a, &la, b, &lb);
118         }else//A總和小,把剩下的大數給A
119             na[idx] = get_max(a, &la, b, &lb);
120             nb[idx] = get_min(a, &la, b, &lb, n);
121         }
122     }
123     
124     memcpy(a, na, n*sizeof(a[0]);
125     memcpy(b, nb, n*sizeof(b[0]);
126     delete [] na;
127     delete [] nb;
128     return delta;
129 }


posted on 2012-05-31 09:17 nullpointer 閱讀(253) 評論(2)  編輯 收藏 引用

FeedBack:
# re: 差距太大了? ——一道面試題
2012-06-04 15:16 | vv
不加注釋讓別人怎么看  回復  更多評論
  
# re: 差距太大了? ——一道面試題
2012-06-04 17:47 | nullpointer
加了:) @vv
  回復  更多評論
  

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久一区| 欧美日韩在线观看一区二区| 欧美成人免费全部观看天天性色| 欧美一区1区三区3区公司| 韩国欧美一区| 亚洲高清三级视频| 国产精品电影在线观看| 亚洲一区网站| 国产精品夫妻自拍| 亚洲欧美日韩中文在线制服| 久久香蕉国产线看观看av| 亚洲精品无人区| 红桃视频欧美| 国产色综合网| 亚洲欧美视频一区二区三区| 一区二区三区色| 亚洲电影免费在线观看| 99成人在线| 欧美高清影院| 久久久噜噜噜久久| 亚洲福利视频在线| 久久女同互慰一区二区三区| 久久国产一区二区| 国内成人自拍视频| 欧美连裤袜在线视频| 在线视频精品| 欧美一区二区三区四区视频| 国产精品理论片在线观看| 亚洲作爱视频| 欧美成人午夜77777| 亚洲一区二区在线观看视频| 亚洲精品在线免费| 国产九九视频一区二区三区| 欧美美女喷水视频| 欧美精品色一区二区三区| 欧美体内谢she精2性欧美| 亚洲精品日韩久久| 99re6这里只有精品| av成人黄色| 亚洲一区二区三区免费视频| 亚洲欧美日韩国产中文在线| 亚洲一区在线免费观看| 欧美在线视频网站| 国产精品久久一区二区三区| 国产精品一区二区久久| 国产精品尤物| 国产欧美日韩激情| 99热在这里有精品免费| 欧美在线资源| 欧美亚洲一区| 国产日韩欧美一区| 狠狠88综合久久久久综合网| 国内精品模特av私拍在线观看| 欧美日韩高清不卡| 亚洲欧美国产高清| 午夜国产精品视频| 久久久噜噜噜久久狠狠50岁| 亚洲日本黄色| 麻豆精品视频在线观看| 蘑菇福利视频一区播放| 亚洲欧美日韩区| 欧美日韩国内| 国内综合精品午夜久久资源| 99国产精品久久久久久久久久| 男女视频一区二区| 欧美在线在线| 亚洲伦理中文字幕| 永久555www成人免费| 99视频精品在线| 久久国产精品99国产| 亚洲黄色av一区| 午夜精品久久久久久久男人的天堂 | 午夜精彩视频在线观看不卡| 蘑菇福利视频一区播放| 欧美成人精品在线播放| 国产一区二区三区四区五区美女 | 欧美v日韩v国产v| 亚洲精品无人区| 一区二区久久久久| 亚洲国产日韩一区| 欧美日韩视频第一区| 欧美专区在线观看一区| 亚洲精品国偷自产在线99热| 中国成人亚色综合网站| 国产精品亚洲一区二区三区在线| 欧美不卡激情三级在线观看| 亚洲一本视频| 亚洲国产日本| 亚洲高清二区| 欧美日韩综合不卡| 久久婷婷综合激情| 麻豆精品精华液| 欧美在线三级| 欧美无砖砖区免费| 久久精品视频一| 欧美性理论片在线观看片免费| 亚洲免费视频一区二区| 欧美日韩激情小视频| 91久久精品国产91性色| 亚洲精品乱码久久久久久按摩观| 国产精品免费一区豆花| 亚洲美女av在线播放| 国产精品一页| 最新成人在线| 狠狠色香婷婷久久亚洲精品| 欧美 日韩 国产精品免费观看| 麻豆国产精品一区二区三区 | 亚洲国产成人不卡| 亚洲第一页中文字幕| 牛牛影视久久网| 亚洲视频免费看| 久久精品亚洲| 久久成人资源| 国产精品一区二区三区四区五区| 久久免费观看视频| 亚洲国产精品一区在线观看不卡| 欧美日韩亚洲成人| 亚洲一区二区三区在线播放| 亚洲男同1069视频| 午夜影视日本亚洲欧洲精品| 久久久www成人免费精品| 亚洲少妇自拍| 久久伊人亚洲| 久热国产精品| 亚洲日本va在线观看| 欧美一级视频免费在线观看| 亚洲欧洲偷拍精品| 亚洲欧美色婷婷| 亚洲欧美日韩另类精品一区二区三区| 卡一卡二国产精品| 欧美sm视频| 激情综合中文娱乐网| 欧美中日韩免费视频| 亚洲国产激情| 亚洲欧美乱综合| 欧美激情视频在线播放| 性做久久久久久久久| 久久综合网色—综合色88| 久久久综合激的五月天| 国产午夜精品理论片a级大结局 | 亚洲午夜在线视频| 亚洲精品日韩久久| 欧美14一18处毛片| 欧美体内she精视频| 亚洲欧美变态国产另类| 国产精品毛片高清在线完整版| 一区二区三区精品视频在线观看| 亚洲精品欧美日韩专区| 日韩一二三区视频| 国户精品久久久久久久久久久不卡 | 久久在线91| 久久精品一区二区三区不卡| 亚洲一区www| 亚洲欧美激情视频在线观看一区二区三区| 亚洲视频福利| 国产精品区一区二区三| 久久久999国产| 欧美成人激情视频| 亚洲国内在线| 欧美精品在线观看一区二区| 欧美一区二区三区免费看| 欧美国产一区在线| 在线视频欧美一区| 在线欧美亚洲| 狠狠色丁香久久婷婷综合_中| 夜夜嗨网站十八久久| 亚洲一区精品电影| 国产毛片久久| 欧美日韩一区综合| 国产精品亚洲综合色区韩国| 国产欧美日韩三级| 亚洲高清视频一区二区| 亚洲图片欧洲图片av| 久久久免费精品| 亚洲欧美精品suv| 午夜精品理论片| 亚洲天堂男人| 日韩一级黄色片| 亚洲精品1区2区| 女同性一区二区三区人了人一| 99精品欧美| 欧美成人午夜视频| 欧美顶级艳妇交换群宴| 欧美国产日韩一区二区在线观看 | 一区二区成人精品| 亚洲精品一区二| 日韩天堂在线视频| 亚洲欧美日本另类| 亚洲国产一区二区三区在线播 | 久久精品国产一区二区电影| 亚洲美女91| 亚洲欧美日韩在线观看a三区| 在线观看日韩一区| 亚洲国产你懂的| 久久国产精品黑丝| 在线亚洲精品福利网址导航| 巨胸喷奶水www久久久免费动漫| 久久成人国产精品| 欧美成人一区二区在线| 亚洲第一区在线观看|