難度較大的微軟面試題

2021-10-09 13:59:10 字數 1694 閱讀 4152

一面:

英文自我介紹,

第一題是個模擬,給一種字串加密方法,加密過程是把乙個串不斷左右左右移動: abcde => dbace,你需要寫乙個還原函式,簡單模擬,注意長度 奇數偶數分開討論。。o(n)解決。。但是可以常數小一點。。

第二題。給乙個森林(陣列形式),每個樹有個高度,現在我要選乙個高度,高於這個高度的樹木會被砍下,我只砍一次,在給定個目標樹木和target, 要求看下的樹木之和在》= target 基礎上盡可能小,求最接近的答案

簡單的二分。。。 o(n) check...  但是據說。。計數排序可以o(n)排序樹木。。。 一旦有序。。記錄字尾和然後再二分中套個二分就可以讓時間複雜度變成 o(n + log(n) * log(n) )。。

二面:直接做題,把中文數字轉化為阿拉伯數字, 比如 一百零一 =》 101, 二零一九 =》 2019 ,

分兩種情況。。

第一種情況就是純數字。 check下字串。不帶 百、十、萬,只包含

一、二、三。。。這樣的,直接暴力處理。

第二種情況就是代表乙個有大小的數字: 三種解法

o( n * log(n) ) : 直接暴力遞迴, 每次找當前串中最大的部分 然後劃分左右部分,左邊計算完乘以中間最大值再加上右邊部分, 當當前串長度為1特判。零也要特判,(比如一百零一裡的零其實沒啥特殊意義)

o( n ) : 單調棧從左到右掃一遍, 出棧時特殊處理一下,把棧頂元素累加到當前值上,最後再把當前值入棧,結果就是棧內元素累加和。

o( n ) 空間複雜度小一點的 : 從右到左去掃,記錄最大值,累加。。。

2、取整問題

例如3.14取整到3.1,3.15取整到3.2,3.25取整到3.2,3.2500001取整3.3。先說規則以及為什麼要這麼取整。然後碼**,給float和取整位數n。

(這個是四捨六入五成雙問題)

(1)被修約的數字小於5時,該數字捨去;

(2)被修約的數字大於5時,則進製;

(3)被修約的數字等於5時,要看5前面的數字,若是奇數則進製,若是偶數則將5捨掉,即修約後末尾數字都成為偶數;若5的後面還有不為「0」的任何數,則此時無論5的前面是奇數還是偶數,均應進製。

微軟的面試官確實比較nice的,外企一般就是考coding

一面:自我介紹,簡單問了專案

演算法題是樂扣的767題,事後才知道。。一開始不太會做,後來和面試官交流交流,有了思路,然後最後還討論了為啥要排序,在我的碎碎念下我知道了為啥要這麼做,因為當時我只是直覺要排序,,最後面試官說挺好的。

給定乙個字串s,檢查是否能重新排布其中的字母,使得兩相鄰的字元不同。

若可行,輸出任意可行的結果。若不可行,返回空字串。

二面:二面一開始問我有沒有英文面試,我說沒有。他說讓我英文自我介紹一下,,我沒準備,於是鼓起勇氣磕磕巴巴的說完了。。面試官期間會說恩這類語氣詞,表示他聽懂了哈哈

演算法題是,微軟小冰,根據語音輸入的是一些語言的金額,怎麼轉化為書面的數字金額。類似於一千二百萬億五百萬六千七百零二十,轉化為數字。

一開始不會做,然後想了想,用字串分隔和dfs遞迴勉強work了。。不過有一些細節沒有處理,不過面試官可以了,又問有沒有什麼優化的方法,別的思路,我想了一下,,表示沒有別的(我是個渣渣)

又問了一下關於通訊懂多少,問sql學過嗎之類的。

過了大概不到乙個周吧,收到了意向書,是我收到的第乙個正式的郵件offer,感謝!雖然我投的是機器學習,但是後面把我調到software engineer~

微軟面試題

題目 小明和小強都是張老師的學生,張老師的生日是m月n日,2人都知道張老師的生日是下列10組中的一天,張老師把m值告訴了小明,把n值告訴了小強,張老師問他們知道他的生日是那一天嗎?3月4日 3月5日 3月8日 6月4日 6月7日 9月1日 9月5日 12月1日 12月2日 12月8日 小明說 如果我...

微軟面試題

fly.c4 推薦您必看!六.演算法題 說明 這些題就不是什麼花樣了,考的是你的基礎知識怎麼樣。再聰明而沒有實學的人都將會被這些題所淘汰。1.鍊錶和陣列的區別在 2.編寫實現鍊錶排序的一種演算法。說明為什麼你會選擇用這樣的方法?3.編寫實現陣列排序的一種演算法。說明為什麼你會選擇用這樣的方法?4.請...

微軟面試題

1.燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時乙個小時十五分鐘呢?答 點燃繩子a的兩端,和繩子b的 一端,當a燒完時,b餘下的可以燒半個小時 這時把b的另一端點燃,並開始計時,等b燒完時可確定15分鐘,然後再點燃繩子c 兩端 燒完總時間為1小時...