Java C 面試手撕演算法彙總

2021-08-08 07:41:09 字數 1840 閱讀 8050

面試手撕演算法彙總

實在沒有o(1)的方法,只能實現o(n),歡迎討論。

方案1:建立n個數字的陣列,迴圈相加,將大於1的數字列印出來

方案2:map,先contains判斷,存在就列印,不存在就put

首先,題主你的問題其實就是乙個上的矩陣能否變成全是1的形式首先,
任意乙個域上的矩陣都可以通過三種初等操作變成相抵標準型(就是只有對角線是1和0,其餘位置全是0的形式):
1把一行的元素乘以乙個數加到另一行上去
2任意一行乘以乙個非0的數
3交換任意兩行
但是只有兩個元素,所以操作2和操作3都可以通過操作1來完成操作2說乘以乙個非0的數,但是只有兩個元素0和1,乙個不讓乘,
乙個乘了也沒用,所以操作2就是個假操作操作3說交換兩行,我們把要交換的兩行寫作向量a和b,
則,運用操作1,把a行加到b行上去,變成(a,a+b),然後再把現在的b行加回a行,變成(2a+b,a+b),
注意我們在中,所以2a=0,故(2a+b,a+b)=(b,a+b),再把現在的a行加到b行上,並注意到2b=0,得到(b,a),
從而完成操作3所以僅使用操作1,我們就可以把乙個上的矩陣變成它的相抵標準型假如這個矩陣秩為1,
則該矩陣可以變成乙個只有左上角那個位置是1,其餘位置全是0的矩陣,此時要變成每個位置都是1應該是一件很easy的事情,
就不贅述了假如這個矩陣可以只通過操作1變成每個位置全是1,那麼它就是乙個秩為1的矩陣所以秩為1是等價條件

可以採取建立兩個指標,
乙個指標一次遍歷兩(k個或者)個節點,另乙個節點一次遍歷乙個節點,
當快指標遍歷到空節點時,慢指標指向的位置為鍊錶的中間位置,
這種解決問題的方法稱為快慢指標方法。
(面試盡量用這種方式,能夠提高印象分)

餓漢懶漢的區別、好處、缺點都要會

這裡可能會引申出單例的條件,詳見:

不解釋,不理解的,先背住再好好理解

10. 陣列中超過一半的數

11. 大檔案100億個數字,求前m大的數

12.兩個有序陣列,求第k個數

13.最大連續子陣列和

14.二維陣列中,每個元素有個數字,求某乙個點到任意一點的sum和(只能向右或者向下) dp記錄到每個點的sum

15.手寫快速排序演算法,並解釋過程。

16.重建二叉樹

17.二分查詢

18.從字串中「aecbcda」找出不重複的字元組成的順序子串「aecbd」,用最優的時空複雜度。

19.判斷乙個鍊錶是否有環(我回答快慢指標,因此引出下乙個問題)

20.乙個陣列,有正有負,把正的移到右邊,負的移到左邊。

21.兩個佇列實現棧

22.括號匹配

23.鍊錶反轉的操作,引數結構自己設計

24.乙個陣列,實現原地反轉

25.乙個只包含小寫字母的字串,去重生成乙個只包含單一字母的字串。例如「abadcab」變成"abdc",只讓用最多乙個額外的int變數

26.大數加法**

27.推排序

28.給乙個字串,由26個英文本母組成,判斷其中有沒有重複出現的元素,有返回true,沒有返回false

面試手寫演算法題總結

1.two sum問題,給定乙個陣列 nums找到陣列中兩個數之和為給定值所有或者 找到即可 組合。暴力搜尋效率很低,這裡用類似雙指標可以讓時間複雜度達到o n def two sum nums,target res nums.sort if len nums 2 return res elif n...

演算法面試彙總

這是我遇見最難得面試,最難,最難,重要的說三遍 自我介紹,這都是套路了,簡單介紹就好 介紹比賽過程,怎麼做的比賽,然後隨機提問 從boosting到adaboost到gbdt到lightgbm介紹演變路線,各個模型到底是怎麼回事 怎麼做的特徵工程,哪些特徵比較重要 一定要做eda和特徵工程嗎,這裡回...

手撕面試題演算法 排序 (4) 歸併排序

歸併排序是乙個相當快速的演算法,其時間複雜度穩定在o n logn 在面試中被問到的頻率也挺高的,今天就來介紹一下這個排序演算法 手撕面試題演算法 排序 1 氣泡排序及其優化實現 手撕面試題演算法 排序 2 選擇排序 手撕面試題演算法 排序 3 插入排序及其優化實現 手撕面試題演算法 排序 3.5 ...