亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: forrestgang
打印 上一主題 下一主題

華為面試題(8分鐘寫出代碼) [復(fù)制鏈接]

論壇徽章:
0
141 [報告]
發(fā)表于 2006-11-21 16:46 |只看該作者

我說一個方法

既然是最小肯定包括差值為負(fù)數(shù).所以可以搜索兩個數(shù)組到臨時數(shù)組中[2n],然后排序小端放入A,大端放入B.

論壇徽章:
0
142 [報告]
發(fā)表于 2006-11-21 17:03 |只看該作者
沒有簡單的方法 應(yīng)該會用到背包算法。8分鐘 呵呵 你去叫F1
的兄弟出來做做看有幾個人能搞定:)

論壇徽章:
0
143 [報告]
發(fā)表于 2006-11-21 18:44 |只看該作者
都這么久了早被華為淘汰了

論壇徽章:
0
144 [報告]
發(fā)表于 2006-11-22 18:54 |只看該作者
哈哈,不過這是在哪面試的,華為來我們學(xué)校似乎不出什么現(xiàn)場編程的題
而且華為工資不知道怎么給的,看學(xué)校BBS上,同是本科生有的3K,有5.5K,很怪啊

論壇徽章:
0
145 [報告]
發(fā)表于 2006-11-23 13:27 |只看該作者
我個人認(rèn)為是對兩個數(shù)組分別排序,然后計算每個數(shù)組的和,那數(shù)組的和大的數(shù)組的小的數(shù)和數(shù)組的和小的數(shù)組的 大的數(shù)交換,比如數(shù)組A的和比數(shù)組B的和大,就那B中的小數(shù)和A中的大數(shù)交換,然后在比較,在交換.......
呵呵,可能說的還是不太清楚,我的表達(dá)能力不好

論壇徽章:
0
146 [報告]
發(fā)表于 2006-11-23 15:21 |只看該作者
從頭到尾看了一遍,得到啟發(fā),不過至今樓主也沒有公布正確結(jié)果,我也嘗試搞了一個,考慮到數(shù)組處理和打印顯示的方便,懶得用c來寫這段代碼,嘗試用PHP來寫了一段,經(jīng)過各種測試案例沒有發(fā)現(xiàn)失敗。
代碼如下:

  1. <?php

  2. //下面列舉了三種前面常提到的特殊例子和一個通常情況下的數(shù)組例子,均進(jìn)行了測試
  3. $a = array(1,0,3);
  4. $b = array(1,2,20);

  5. $a = array(3,5,6,7,13,14);
  6. $b = array(1,3,7,8,10,17);

  7. $a = array(11,12,8,91);
  8. $b = array(1,2,17,100);

  9. $a = array(1,7,3,343,43,23,2323,454,5,5656,56,565,43,41,23,2,0,0,1);
  10. $b = array(10,15,4,454,45,76,787,989,67,4545,65,566,2,343,3,4,2,4,0);

  11. $count = count($a);

  12. $c = array_merge($a,$b);
  13. sort($c);
  14. $sum = array_sum($c);
  15. $max = $c[$count*2-1];

  16. if ($max >= $sum/2) { //如果有一個數(shù)字大于其他數(shù)字總和,簡單處理
  17.     for($i=0;$i<($count-1);$i++) {
  18.         $a[$i] = $c[$i];
  19.         $b[$i] = $c[$count-1+$i];
  20.     }
  21.     $a[$count-1] = $max;
  22.     $b[$count-1] = $c[$count*2-2];

  23. } else {    //通常情況

  24.     for ($i=0;$i<$count;$i++) {
  25.         $suma = array_sum($a);
  26.         $sumb = array_sum($b);
  27.         
  28.         $x = ($suma - $sumb)/2; //兩個數(shù)組各自和的差
  29.         $min = abs($x);    //差的絕對值
  30.         
  31.         $ch = false;    //進(jìn)行交換的開關(guān)
  32.         $t = 0;
  33.                
  34.         for ($j=0;$j<$count;$j++) {
  35.             $y = ($a[$i] - $b[$j]); //兩個元素間的差
  36.             $z = $x-$y;     //數(shù)組和之差與元素差之間的差,不考慮正負(fù)
  37.             $absz = abs($z);    //得到絕對值,用絕對值比較
  38.             
  39.             if ($absz <= $min) {
  40.                 $ch = true;
  41.                 $min = $absz;
  42.                 $t = $j;
  43.             }
  44.         }
  45.         
  46.         if ($ch) {  //找到$ai和$bj,進(jìn)行交換
  47.             $tmp = $a[$i];
  48.             $a[$i] = $b[$t];
  49.             $b[$t] = $tmp;
  50.         }
  51.     }

  52. }

  53. sort($a);
  54. sort($b);

  55. //分別打印輸出重新分組后的$a和$b數(shù)組,以及各自的和
  56. echo "Sum(b) = ".array_sum($a)."\n";
  57. print_r($a);

  58. echo "Sum(b) = ".array_sum($b)."\n";
  59. print_r($b);

  60. ?>
復(fù)制代碼


其實我的解題思路很簡單:首先這道題可以認(rèn)為是把2n個數(shù)進(jìn)行均分成兩組數(shù),要求兩組數(shù)的和盡可能接近。
從樓主的題目中可以看出,排序應(yīng)該不是主要的,而如何進(jìn)行交換是非常重要的,關(guān)鍵的就是ai和bj的確定問題。

這個里面可能會有兩種情況,一種是所有的數(shù)字當(dāng)中,有一個數(shù)字大于其他數(shù)字總和,這種情況很好處理,把2n個數(shù)字里面最小的0,n-2個加上最大的那個數(shù)字給a數(shù)組,剩下的為b數(shù)組即可,另外一種情況就是通常情況,沒有一個數(shù)字絕對大。

[ 本帖最后由 toplee 于 2006-11-23 15:32 編輯 ]

論壇徽章:
0
147 [報告]
發(fā)表于 2006-11-28 01:58 |只看該作者
原帖由 la.lune 于 2006-11-13 10:55 發(fā)表
放到一個臨時數(shù)組里排序后,兩頭取,分別存在a,b里


同意~ [/quote]

我也同意.

合并放到一個臨時的數(shù)組里邊,排序列.然后在分別交替取頭尾.依次交替放往a,b數(shù)組.即:

取頭,取尾.放往a.
取[頭-1],取[尾-1].放b.
取[頭-2],取[尾-2].放a.
取[頭-3],取[尾-3].放b.
.........

這樣永遠(yuǎn)A大于B..并且兩數(shù)組之間最相等.

[ 本帖最后由 agaonet 于 2006-11-28 20:26 編輯 ]

論壇徽章:
0
148 [報告]
發(fā)表于 2006-11-29 14:56 |只看該作者
我也想一個,
a) 兩個數(shù)組合并c[n],然后從小到大排列,
b) 新建兩個空數(shù)組, 第一大c[n]放在a[1],第二大c[n-1] 放在b[1]
c) 接下去就是遞歸了,c[i] (i從后面開始)放在 min(a數(shù)組之和 ,b數(shù)組之和) 之中.
d) 結(jié)束
{1,2,3} {0,0,999}->{0,0,1,2,3,999}
a[1]=999,b[1]=3;
b[2] =2,
b[3]=1
b[4]=0;
b[5]=0;

論壇徽章:
0
149 [報告]
發(fā)表于 2006-11-29 16:11 |只看該作者
// huawei.cpp : 定義控制臺應(yīng)用程序的入口點(diǎn)。
//某面試題,自己測試
/*
有兩個數(shù)組a,b,大小都為n,數(shù)組元素的值任意,無序;
要求:通過交換a,b中的元素,使數(shù)組a元素的和與數(shù)組b元素的和之間的差最小
*/

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

using namespace std;

int min(vector<int> a1,vector<int> b1)
{
        int sum1 = 0;
        int sum2 = 0;
       
        vector<int>::const_iterator Siter;

        for(Siter = a1.begin(); Siter != a1.end(); ++Siter)
                sum1 += *Siter;
        for(Siter = b1.begin(); Siter != b1.end(); ++Siter)
                sum2 += *Siter;

        if(sum1 < sum2) return 1;
        else return 0;

       

}
int _tmain(int argc, _TCHAR* argv[])
{
        int a[6] = {3,5,6,7,13,14};
        int b[6] = {1,3,7,8,10,17};
        vector<int> a1;
        vector<int> b1;
        vector<int> c1;

        vector<int>::const_iterator iter;
        int i;

        for(i=0; i<6; i++)
                c1.push_back(a[i]);
        for(i=0; i<6; i++)
                c1.push_back(b[i]);


        sort( c1.begin( ), c1.end( ), greater<int>( ) );

        for(iter = c1.begin(); iter != c1.end() ; ++iter)
                cout<<*iter<<',';
       
       
        iter = c1.begin();
        a1.push_back(*iter);
        b1.push_back(*(++iter));
       
        for(; iter != c1.end(); ++iter)
        {
                if(min(a1,b1))
                        a1.push_back(*iter);
                else b1.push_back(*iter);
        }
       
        cout<<"\na1 :\n ";
        for(iter = a1.begin(); iter != a1.end(); ++iter)
                cout<<*iter<<',';
        cout<<"\nb1 :\n ";
        for(iter = b1.begin(); iter != b1.end(); ++iter)
                cout<<*iter<<',';
}

論壇徽章:
0
150 [報告]
發(fā)表于 2006-11-29 16:17 |只看該作者
把所有的數(shù)取出來,按照從大小進(jìn)行排列,放在數(shù)組c。
a和b分別由totalA totalB累計分別的和(初值為0)。
順序從c之中取兩個數(shù),把較大的數(shù)放在total較小的數(shù)足里。
over
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP