阿里巴巴2013筆試最後一題解答

2021-06-14 06:05:20 字數 822 閱讀 2503

題目描述:乙個**金冠賣家有n個倉庫,每個倉庫儲存量不同,他想通過搬運使得所有倉庫儲存量相等,n個倉庫形成環狀,搬運只在相鄰倉庫間發生,請設計高效演算法達到賣家的目的,並且使得總搬運量最低。

分析:設每個倉庫庫存為a[i],第i個倉庫搬給其右邊的倉庫x[i]個。m為最後每個倉庫庫存。可有方程

m = a1 - x1 + x2

= a2 - x2 + x3

=﹉= an - xn + x1

x2 = m - a1 + x1 = x1 - c1

x3 = m - a2 + x2 = x1 - c1 + m - a2 = x1 - c2

x4 = x1 - c4

…xn = x1 - cn

問題為求出x陣列使得所有元素之和最小,只要求出x1即可。ci為已知,所以問題可轉化為數軸上n個點ci,求出一點使得其到各個點的距離之和最短。可以證明所有點的中間點即為最解。簡單證明如下:

設最解點為k,如果k不是最中間點,則必然其兩邊有的點數不同,不妨設右邊點數多於左邊,為了更具體,不妨設左邊有2個點,右邊有3個點,現在使k向右移動d個單位,則左邊所有點到k的總距離將增加2d個單位,而右邊減少3d個單位,總距離減少d個單位,顯然k不是最優解,當k右移至中間點時,此時無論左移或右移都會增加總距離,故中間點為最優解。

以上證明並不嚴謹,但足以說明最優解。

程式如下

int foo(int a)

return sum;

}

時間複雜度o(nlogn).,若有朋友發現錯誤,歡迎指正,共同學習。

Alibaba 阿里巴巴2014筆試題

前天筆試的阿里巴巴,有一道填空題是問如何只掃瞄一次陣列,求出其方差。考試的時候知道肯定可以求出來,而且要用迭代 即遞推 可惜當時由於時間緊張,推導的公式寫錯了。在此補上。公式使用latex寫的。所以只能截圖了。最後給出了c函式。題目二 不開闢變數,僅用3條語句交換兩個變數int a,int b 答案...

2013阿里巴巴校園招聘筆試題

今天剛參加完阿里巴巴的筆試,單選,多選,綜合題。單選考的比較雜,每門課考一兩道題甚至一兩個選項,linux啊,網路啊,作業系統啊,多選5道題,也差不多是比較雜的,這些都沒什麼難度,如果基礎還好的話。大題目前兩題很簡單的送分題,乙個是陣列的逆置,乙個是作業系統裡面作業排程演算法先進先出和最短作業優先。...

阿里巴巴 2023年研發類筆試題

單選題 1.下列說法錯誤的是 a.b.c.千兆網絡卡的讀寫速度是1gb s.d.ddr3記憶體的速度是100gb s 2.下面不能用作linux程序間通訊的是 a.共享記憶體 b.管道名 c.訊號量 d.臨界區 3.cpu和i 0一次只能處理乙個程式,現有 p1 計算40ms i o80ms 計算4...