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...