華為春招機試2021(第二題 挑選貨物)

2021-10-21 18:15:56 字數 2805 閱讀 5083

3.解析

(3)發廣播

4.後序

2023年春招,參加的3.10機試,三道題600分a了540分,第二道對了70%,其它全對。

第二題主要是沒有優化演算法,複雜度為o(n^2),結果超時了,睡了一覺之後,才理清思路,然後這篇文章也是主要講下第二題思路。

自己沒有截圖,用的牛客網中的題目。水印也是別人的,沒辦法。

感覺看過於眼疼,碰巧在牛客網找到有人發了文本版的,就順手牽羊了。

1.小明抽到字串,小紅抽到乙個更長的,小紅有限次的替換乙個字母為另乙個,比如最大替換次數為2

請判斷小紅每次遊戲時候能不能成功替換字母從而包含小明的字串,可以請輸出最小替換次數,不可以或者不需要替換輸出0;

輸入三行:第一行小明的字串

第二行小紅的字串(長一些)

第三行是最大允許替換次數

2.一排包裝箱從1編號,各個包裝箱存放的貨物數組成乙個集合m=

貨車一次最多運送k件貨物

小王想一次從中挑選k的整數倍件貨物,再分批運輸。

倉庫管理員為了方便要求小王必須選擇連續的包裝箱,比如可選擇1、2、3號箱,不能選2、4、6

如果運輸k整數倍件貨物,請幫小王計算有多少種挑選方式

輸入:包裝箱數n,貨車最大一次運送的數量為k件

各個箱子存放的貨物m1,m2,m3。。。

輸入為兩行:n k

m1 m2 m3。。。

n和k取值範圍為[1,100000]

第i個包裝箱存放貨物的取值範圍也是[1,100000]

輸出:一行輸出有多少種方式,如果不存在可行的方式,輸出0

3.n個廣播站,站點之間有些有連線,有些沒有。有連線的站點在接受到廣播後會互相傳送。給定乙個n*n的二維陣列matrix,

陣列的元素都是字元』0』或者』1』。matrix[i][j]=『1』,則代表i和j站點之間有連線,matrix[i][j] = '0』代表沒連線,

現在要發一條廣播,問初始最少給幾個廣播站傳送,才能保證所有的廣播站都收到訊息

輸入:一行資料代表二維陣列的各行,用逗號分隔。保證每個字串所含的字元數一樣

比如:110,110,001

輸出:返回初始最少需要傳送廣播站個數

暴力法oc,這道題在leetcode貌似有類似的。第一次沒考慮超過允許替換字串的限制,只通過90%,後面加了個判斷就行。

這道題我開始是暴力法做的,通過計算i,j之間的數值之和,看能否被k整除得到,但是這樣子演算法複雜度為o(n^2),而n的範圍過萬,這是行不通的,使用二維的動態規劃也是同樣的道理,這樣不但時間複雜度高,而且空間複雜度也高。

睡覺的時候在思考這個問題,後面想出了乙個合適的演算法。

1.首先我先下個定義,假設sum[i]表示從0到i的貨物數量之和,那麼從a到b的貨物之和就可以表示為sum[b]-sum[a]。

2.這裡可以做個優化,對sum[i]進行%k處理,這樣就可以避免累加的數值過大,超過界限。

3.接下來,我們就只需要統計0-n-1貨物中相同sum[i]的個數即可。如果存在sum[a]=sum[b],表明存在乙個可行方案。

4.這就意味題目變成組合數問題,如果有n個相同點,那麼就是n(n-1)/2,其中這裡我指的相同點是說sum[a]=sum[b]=sum[c]=p,而且這個p最多為k個,也就是我們只要遍歷k次即可。

5.複雜度分析:讀取數字的時候進行累加運算,複雜度為o(n),後面統計k次的組合數問題,因此最終演算法複雜度為o(n+k)。

(1)資料讀取。讀取數字的時候進行加工處理。讀取第i個數,假設為c。那麼sum[i]=(sum[i-1]+c)%k。假設i為0的時候,sum[0]=c。此處迴圈n次。並且開始的時候準備個a[k]的陣列,初始值為0,用於記錄相同值的個數,假設sum[i]=k,那麼a[k]++,表示等於k的值加1。

(2)資料計算。根據a[k],我們迴圈k次,把每次a[i]中的值,以n(n-1)/2的方式加進最後的返回值ret。當然這個ret初始值為0

糾正:這裡沒考慮a[0]的特殊性,所以a[0]要加1。

(3)輸出結果。

#include

#include

#define len 100001

intmain()

;int a[len]=;

int m;

int n, k;

int ret =0;

scanf

("%d%d"

,&n,

&k);

for(

int i =

0; i < n; i++

) a[0]

++;//有位大佬提醒這裡還要進行加1處理,因為考慮當sum[i]=0時,是不需要取兩數相減的。

for(

int i =

0; i < k; i++

)printf

("%d\n"

, ret)

;return0;

}

bfs+染色,複雜度目測是o(v+e)。尷尬的是我在寫的時候喜歡把函式寫成dfs(明明不是),希望面試官不看筆試吧,又不然真的有點尷尬。

以後有時間的時候再補充下**和,最近只能先記錄下自己的思路,如果有錯也可以告訴我更正。

題目難度係數不高,但我是真的考的時候沒想到,嗚嗚嗚!!!!

2016華為春招機試

三道程式設計題,第一道是輸出連續字串連續重複 的字元和它的個數。第二道 求兩個大數相除的餘數 考試的時候只想到了兩個數相減,導致提交結果一直是時間超出限制。回來後重新思考了一下,寫了個新程式,同時把求商的演算法也寫了一下,編譯通過,但不知道能不能在華為測試系統通過。include stdafx.h ...

華為機試再回憶 第二題

題目如下 題目 選定陣列最大最小元素位置並輸出 描述 輸入一組10個整數的陣列 陣列元素之間用逗號分隔 最大的與最後乙個元素交換,最小的與第乙個元素交換,輸出交換前與交換後的陣列 例如 輸入 56,23,45,0,122,26,53,100,2,32 輸出 56,23,45,0,122,26,53,...

2017復旦機試第二題 水

2017複試第2題.cpp 定義控制台應用程式的入口點。給定乙個9位數字的isbn,求其校驗位。isbn格式為2 02 033598,校驗位的計算方法如下 從左到右依次將各位數字乘10,9,8,2,求出其和s,作模運算得m s mod 11。若11 m在1和9之間,校驗位即為該數字 若11 m等於1...