華爲2020校招筆試編程題 看這篇就夠了(下)

背景

接上篇的背景,繼續看看,首先把大綱再發一份出來。
在這裏插入圖片描述
在這裏插入圖片描述

乾貨(高級部分)

1. 高級數據結構概念,基本操作,以及優缺點等

1.1 二叉查找樹

簡單題

  1. (對稱二叉樹)
  2. (平衡二叉樹)
  3. (翻轉二叉樹)

中等題

  1. (二叉樹的中序遍歷)
  2. (不通的二叉搜索樹)
  3. (二叉搜索書迭代器)
  4. (從二叉搜索書到更大和樹)

1.2 堆

簡單題

  1. (數據流中的第K大元素)
  2. (最後一塊石頭的重量)

中等題

  1. (根據字符出現頻率排序)
  2. (前K個高頻單詞)
  3. (重構字符串)

1.3 圖論

簡單題

  1. (不鄰接植花)
  2. (找到小鎮的法官)

中等題

  1. (地圖分析)
  2. (顏色交替的最短路徑)

2. 常用算法及思想

2.1 排序算法(快速、插入、堆排序等)

簡單題

  1. (數組的相對排序)
  2. (兩個數組的交集)
  3. (兩個數組的交集2)

中等題

  1. (顏色分類)
  2. (合併區間)
  3. (重構字符串)

2.2 迭代、遞歸的思想

簡單題

  1. (二叉搜索樹的範圍和)
  2. (第 N 個泰波那契數)

中等題

  1. (第K個語法符號)
  2. (劃分爲k個相等的子集)

2.3 分治的思想(如:二分查找、歸併排序等)

簡單題

  1. (二分查找)
  2. (x的平方根)

中等題

  1. (Pow(x,y))
  2. (搜索二維矩陣)
  3. (尋找重複數)

2.4 搜索算法(深度,廣度)

簡單題

  1. (二叉樹的所有路徑)
  2. (對稱二叉樹)

中等題

  1. (路徑總和 II)
  2. (二叉樹的層次遍歷)

2.5 貪心算法

簡單題

  1. (最後一塊石頭的重量)
  2. (玩籌碼)

中等題

  1. (根據身高重建隊列)
  2. (任務調度器)

2.5 動態規劃(揹包0-1難度)

簡單題

  1. (爬樓梯)
  2. (最大子序和)

中等題

  1. (醜數2)
  2. (不同的二叉搜索數)

附錄:吐血整理的筆記

用數據結構和算法

數據結構:字符串、數組、棧、隊列(包括優先隊列、雙端隊列)、鏈表、哈希表、Set、二叉樹。最小堆最大堆的問題都可以用優先隊列來解題,堆的調整我還是有點暈的。

算法:二叉樹的前/中/後序/層次遍歷;圖的BFS、DFS、最短路徑算法、最小生成樹;回溯、遞歸、動態規劃等。排序算法基本數據結構有現成輪子,瞭解原理就好。

這塊重點看官方的考試範圍。

對於JAVA,重點搞清楚常用的幾大集合類特點(是否有序、什麼順序、是否允許重複),才能在解題過程中立即想到某個特性需用哪個數據結構、哪個類庫。

在這裏插入圖片描述
刷題過程中總結的典型解題思路(持續刷,有經驗的請繞路)

1. 滑動窗口篇

滑動窗口是一種雙指針解題思路,採用left、right左右兩個指針,表示一個滑動的窗口之最左端和最右端(初始化 left = right = 0)。左右指針輪流前進,窗口大小增增減減(窗口大小可固定可動態,依據題目要求),窗口不斷向右滑動,最終可實現在線性時間內獲得問題最佳解。有時題目需要輔以HashMap、數組進行判存在性、可行性。

推薦文章:滑動窗口

2.鏈表篇

鏈表最基礎的操作:創建、插入、刪除是必須掌握的。

常用解題方法主要是採用快慢指針(僅涉及查找操作)、增加輔助頭節點(涉及增刪改操作),在此基礎上對怎麼判斷鏈表有環及入環點、中間節點、倒數K個等解題小技巧建議熟練掌握。鏈表題一定要白紙上畫,畫出來就能寫出來。

推薦文章:鏈表

3.圖篇

推薦程序員小灰2019年關於圖的幾篇帖子,講的非常通俗易懂了
在這裏插入圖片描述

4. 二叉樹篇

二叉樹感覺沒啥技巧,基本功紮實就好。重點是前/中/後序/層序遍歷,LeetCode上會基於這些生出些變種,比如Z字形打印,從前序與中序,從中序和後序遍歷恢復二叉樹等,劍指offer和小灰上有典型講解。

5. 回溯法篇

回溯算法是類似枚舉的搜索嘗試過程,按照深度優先搜索的策略,從根結點出發深度探索解空間樹,當探索到某一結點時,要先判斷該結點是否包含問題的解,如果包含,就從該結點出發繼續探索下去;如果該節點不包含問題的解,就“回溯”返回,即退回一步重新選擇,嘗試別的路徑。

若用回溯法求問題的所有解時,要回溯到根,且根結點的所有可行的子樹都要已被搜索遍才結束。而若使用回溯法求任一個解時,只要搜索到問題的一個解就可以結束。

適應題型:求全排列組合

模板:刷題過程中看到LeetCode裏有個不錯的模板,待補充。

6. 動態規劃篇

動態規劃就是下一狀態可以根據上一狀態,或之前幾個狀態獲取到的一種推理過程。可以看下詳解動態規劃——鄒博講動態規劃一文,其中講了路徑、硬幣、最長子序列。

雖然多次考到,我狠刷了七八道,自己推理狀態轉移方程總是暈–#,好在DP能解的問題,還有其它輪子可以解。

7. 位運算篇

位運算很基礎了,典型的位運算技巧與應用,但平時工作中用的偏少,溫故下:位運算

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章