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

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

Chinaunix

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

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

論壇徽章:
1
榮譽(yù)會員
日期:2011-11-23 16:44:17
21 [報(bào)告]
發(fā)表于 2006-11-13 20:20 |只看該作者
原帖由 zhhui2000 于 2006-11-13 07:54 發(fā)表
先各自排序,再交叉存放較大無素

這個(gè)基本可行,但不是交叉存放較大元素,而是哪邊的和小就一直放大元素,直到n,然后把剩下的扔到另一組中就ok了。

論壇徽章:
0
22 [報(bào)告]
發(fā)表于 2006-11-13 20:25 |只看該作者
for (i=0; i<N; i++)
    {
        for (j=0; j<N; j++)
        {
            change(a+i, b+j);
            if (abs(sum(a)-sum(b)) > ab_diff)
            {
                change(b+j, a+i);//如果不能使差值變小,則交換回去,也就是說不交換
            }
            else
            {
                ab_diff = abs(sum(a)-sum(b));//更新差值
            }
        }
    }

TC2測試


原帖由 namtso 于 2006-11-13 17:16 發(fā)表
我相信,這個(gè)題在8分鐘內(nèi)能寫出代碼來的人,絕對是大大的牛人。

我覺得應(yīng)該這樣:
a和b 分別求出累加和,得出累加和的差c1,然后循環(huán)查找找a中的某個(gè)元素a,使得a與b中的某個(gè)元素b[j]交換之后,得出一個(gè) ...

[ 本帖最后由 greensky_34 于 2006-11-13 20:29 編輯 ]

論壇徽章:
0
23 [報(bào)告]
發(fā)表于 2006-11-13 21:36 |只看該作者
我有個(gè)想法,利用天平的原理:

1.兩端各有n個(gè)元素.其總重分別為:W1, W2,差為diff_w(W1,W2)


2.結(jié)束條件是,diff_w(W1,W2)小于等于左右兩邊中任意元素之差的最小值.

3.如果不滿足上述條件則進(jìn)行置換,置換的規(guī)則是,將上述兩邊任意二元素之差最接近diff(w1,w2)得元素進(jìn)行置換..再重復(fù)上述步驟.

論壇徽章:
0
24 [報(bào)告]
發(fā)表于 2006-11-13 21:43 |只看該作者
原帖由 hithotwinds 于 2006-11-13 10:16 發(fā)表
剛學(xué)編程兩個(gè)月,不知道思路是否正確,錯(cuò)就一定有的。

#include"stdio.h"
com(int a[2000],int n)
{int i,j,p,q,s;
for(i=0;i<2*n-1;i++)
  {
a[0]=q,p=i;
  for(j=i+1;j<2*n;j++)
   ...



才兩個(gè)月能寫出這么長的程序還是不錯(cuò)滴。。。
                                        加油!!

論壇徽章:
0
25 [報(bào)告]
發(fā)表于 2006-11-13 22:14 |只看該作者
原帖由 ccjjhua 于 2006-11-13 11:42 發(fā)表
把a(bǔ),b 2數(shù)組的元素放到數(shù)組3(2n大。 中進(jìn)行排序,
a 先取最小的,b先取次小的,
然后根據(jù)a,b已取元素和的大小來決定誰來取剩下元素中最小的。策略是,已取得的所有元素之和大的來取C中剩下元素中的最小者。如 ...


這種方法似乎很可行

論壇徽章:
0
26 [報(bào)告]
發(fā)表于 2006-11-13 22:32 |只看該作者
我寫了80分鐘,未果
當(dāng)時(shí)心想,TMD,難道這是google面試題嗎

論壇徽章:
0
27 [報(bào)告]
發(fā)表于 2006-11-13 22:36 |只看該作者
小弟覺得這個(gè)題目應(yīng)用動態(tài)規(guī)化來解:

原問題與下問題應(yīng)該屬同類。

有一組數(shù)a1,a2,a3,...,an. 求出一個(gè)子串,其各元素的和總元素和的一半差值最!設(shè)總元素和為sum,

子串和為s_sub.  差值為dis[i][j],表示第 i個(gè)元素到j(luò) 個(gè)元素之間的子串和。每個(gè)元素有兩種狀態(tài),1為選,0為不選。  
   
         當(dāng) i==j 時(shí) dis[i][j] = a[i] = a[j]
         當(dāng) i<j  時(shí) dis[i][i] = min{sum-s_sub-a[i], sum-s_sub}

這是大概思想,如有錯(cuò)誤望請正!

論壇徽章:
0
28 [報(bào)告]
發(fā)表于 2006-11-13 22:43 |只看該作者
原帖由 greensky_34 于 2006-11-13 20:25 發(fā)表
for (i=0; i<N; i++)
    {
        for (j=0; j<N; j++)
        {
            change(a+i, b+j);
            if (abs(sum(a)-sum(b)) > ab_diff)
            {
                change(b+j, ...


不行阿,我理解后用c實(shí)現(xiàn),結(jié)果不正確,可能是我理解有問題?


  1. #include <iostream>

  2. using namespace std;

  3. void change(int* a, int* b) {
  4.     int t = *b;
  5.     *a = t;
  6.     *b = *a;
  7. }

  8. int diff(int a, int b) {
  9.     return abs(a - b);
  10. }

  11. int main() {
  12.     const int N = 3;
  13.     int a[] = {1, 2, 3};
  14.     int b[] = {0, 0, 99};
  15.     const int sum_a = 6;
  16.     const int sum_b = 99;

  17.     int ab_diff = abs(sum_a - sum_b);
  18.     for (int i=0; i<N; i++) {
  19.         for (int j=0; j<N; j++) {
  20.             change(a+i, b+j);
  21.             if (abs(sum_a - sum_b) > ab_diff)
  22.             {
  23.                 change(b+j, a+i);//如果不能使差值變小,則交換回去,也就是說不交換
  24.             }
  25.             else
  26.             {
  27.                 ab_diff = abs(sum_a - sum_b);//更新差值
  28.             }
  29.         }
  30.     }

  31.     for (int i = 0; i < N; ++i) {
  32.         cout << a[i] << " ";
  33.     }
  34.     cout << endl;

  35.     for (int i = 0; i < N; ++i) {
  36.         cout << b[i] << " ";
  37.     }
  38.     cout << endl;
  39. }
復(fù)制代碼

論壇徽章:
0
29 [報(bào)告]
發(fā)表于 2006-11-13 23:12 |只看該作者

回復(fù) 1樓 forrestgang 的帖子

>>有兩個(gè)數(shù)組a,b,大小都為n,數(shù)組元素的值任意,無序;
>>要求:通過交換a,b中的元素,使數(shù)組a元素的和與數(shù)組b元素的和之間的差最小

這個(gè)與下面的等效。
數(shù)組 a:  a1,  a2, a3, ... an;
        b:  b1, b2, b3, ...  bn;
先從 a 中取 x 個(gè)元素, 再和 b 中的 n-x 個(gè)元素,把他們的值相加, 得 sumi;   
再從 a 中取剩下的 n-x 個(gè)元素, 和 b 中的 x 個(gè)元素,把他們的值相加, 得 sumj;
取 |sumi - sumj| 的絕對值為 subsum;

x 從 0 開始取到 n, 每次得到一個(gè) subsum, 最小的那個(gè) subsum 即所求的情況。
:)。
大概就是這樣的,用循環(huán),呵呵。

論壇徽章:
0
30 [報(bào)告]
發(fā)表于 2006-11-14 00:06 |只看該作者
1.  求和并除二, 記為 AVG
2.  用短的數(shù)組長度個(gè)的數(shù)字排列組合, 找最接近 AVG 的.
3.  把這幾個(gè)數(shù)填入短數(shù)組, 其余填入長數(shù)組.

不知道這道題中是否要求輸出換的步驟, 如果需要, 小 CASE. 不說了.
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP