算法必考的6大類
第一:常見的八大排序方式(尤其二分法插入排序夷陋、歸并排序需要著重掌握其思想)??感覺快排好重要
第二:時間復雜度的計算
第三:鏈表相關(guān)算法,鏈表翻轉(zhuǎn)汤纸,鏈表合并等(手寫反轉(zhuǎn)鏈表衩茸、鏈表復制、鏈表合并)
第四: 二叉樹相關(guān)算法前序贮泞、中序楞慈、后序遍歷(遞歸,迭代)
第五:字符串匹配啃擦、去重問題抖部。
第六:數(shù)組查重問題。
紅黑樹與BL樹
手寫隊列或者鏈表等數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)议惰。
8.貪心算法相關(guān)問題
算法:二叉樹遍歷慎颗、鏈表、字符串匹配、二維數(shù)組旋轉(zhuǎn)俯萎、排序傲宜、位運算,感覺基本上跑不出這幾個
排序?qū)m椡黄颇??https://juejin.cn/post/6844903568273571853
排序(手寫常見排序夫啊、歸并排序函卒、堆排序)
快速排序(Quick Sort), 歸并排序(Merge Sort)的原理與代碼實現(xiàn)撇眯。需要能講明白代碼中每一行的目的报嵌。快速排序時間復雜度平均狀態(tài)下O(NlogN)熊榛,空間復雜度O(1)锚国,歸并排序最壞情況下時間復雜度O(NlogN),空間復雜度O(N)
入門題目:
Leetcode 148. Sort List
Leetcode 56. Merge Intervals
Leetcode 27. Remove elements
快排了解不玄坦?最壞的情況是怎樣血筑?如果有大量重復數(shù)據(jù)怎么優(yōu)化?時間復雜度煎楣、空間復雜度?
一個大致有序的數(shù)組如何排序豺总,最快時間復雜度
排序算法復雜度中nlgn中的lgn是怎么來的
7.寫出你所知道的排序算法及時空復雜度,穩(wěn)定性
字符串:
String 方式計算加法择懂。
算法題:反向輸出字符串
算法:翻轉(zhuǎn)字符串成work am I
字符串中最長不重復子串
算法題:字符串移除多余空格喻喳,且技術(shù)單詞首字符大寫。
算法??兩個字符串?比較最大的公共字符串?困曙,主要是思路?(面對問題表伦,以大化小)
最后一道算法: 劍指 Offer 38. 字符串的排列 - 力扣(LeetCode) (leetcode-cn.com)
String 轉(zhuǎn) int。
重點: 字符的操作規(guī)則
1.字符類型? Character
字符串遍歷后字符的操作
第一種:
char c;
String str=String.valueof(c);
第二種:
Stack stackChar =new Stack<>();
s.toCharArray(); //把String 轉(zhuǎn)成char數(shù)組
3 .字符遍歷: s.charAt
2.字符轉(zhuǎn)ASCALL
3.ASCALL如何轉(zhuǎn)字符
數(shù)組:(數(shù)組排序,數(shù)組反轉(zhuǎn),數(shù)組求和,數(shù)組重復冤案)
5.算法題赂弓,反轉(zhuǎn)數(shù)組
5.算法,刪除數(shù)組中的重復元素
4.兩個不重復的數(shù)組集合中,求共同的元素哪轿。
無序數(shù)組中查找兩個和為某一個值的數(shù)字盈魁,返回索引值
算法題:給定一個排好序的數(shù)組,找出最左邊的某個指定數(shù)字的下標
找出一個無序數(shù)組中出現(xiàn)超過一半次數(shù)的數(shù)字窃诉;
算法:數(shù)組中出現(xiàn)頻率最高的k個數(shù)杨耙,list. sort實現(xiàn) 時間復雜度
如何在無序數(shù)組中快速找到最小值
6.給你一個整數(shù)數(shù)組?nums?,請你求出乘積為正數(shù)的最長子數(shù)組的長度
2.含有二維數(shù)組的題目(島嶼200飘痛,56)
數(shù)組相關(guān)重要操作:
6.數(shù)組排序
Arrays.sort(people);
3.二維數(shù)組轉(zhuǎn)成一維數(shù)組看待
最大 K 問題
5.2000萬個整數(shù)珊膜,找出第五十大的數(shù)字?
背包問題(最大容量與最大價值)
動態(tài)規(guī)劃與遞歸的差異性宣脉,什么問題可以用動態(tài)規(guī)劃车柠,什么問題不可以
兩個字符串,求其最長子串?例如abc1234竹祷,123bc(暴力方法的復雜度谈跛,動態(tài)規(guī)劃的復雜度)
.算法題,不同面值的幾個硬幣塑陵,怎么求滿足條件的最小值
其他:
6.求1000以內(nèi)的水仙花數(shù)以及40億以內(nèi)的水仙花數(shù)
10.給你個數(shù) 1 吧感憾,比如 1000011 里面有幾個 1 ?
9.算法斐波那契臺階
100 億個單詞令花,找出出現(xiàn)頻率最高的單詞阻桅。要求幾種方案;
二維坐標系中有一些點兼都,找出一點直線覆蓋盡可能多的
給定數(shù)組-1嫂沉,0,1俯抖,0输瓜,-1,-4芬萍,0找出其中3個數(shù)相加為0的全部組合尤揣,給出解決方案
情景題:
6.北京市2個月?lián)u一次號,搖中的概率是3000分之一柬祠,請問需要搖多久北戏,概率能達到百分之50?
7.拋一枚硬幣漫蛔,正反面的概率各占50%嗜愈,請問,連續(xù)兩次反面的概率是多少莽龟? 正正蠕嫁,正反,反正毯盈,反反 剃毒,出現(xiàn)的概率各占四分之一。
算法題:斐波拉契數(shù)列搂赋,遞歸的方式怎么優(yōu)化赘阀?
棧的遍歷:
會邊遍歷邊刪除
while (!stack.isEmpty()) {
int temp =stack.pop();
}
2者的區(qū)別:
// 取出棧頂?shù)脑?/p>
String peekString = stack.peek();
String popString = stack.pop();
哈希表
HashMap的key是否可以為null?
HashTable 不可以而 HashMap 可以脑奠,HashMap 可以存一個 key 為 null 的元素
數(shù)據(jù)結(jié)構(gòu)的題目統(tǒng)計
第一:數(shù)組:
1.0485題 :最大連續(xù)1的個數(shù)? ?太簡單了
2.0283題:? 移動0太簡單了
3. 0027題: 移除元素? ? ? ? ? ? ? ?簡單(最重要的,雙指針)
第二:鏈表:
203: 移除鏈表元素
206:反轉(zhuǎn)鏈表 (重要)
第三:隊列:
933:最近的請求次數(shù)
第四:棧:
20:? ? ? ?有效的括號
496:? ? ?下一個? ? (棧+隊列)
需要注意的地方:
l++ 和++l 的區(qū)別
-1: 是否是nums.leng-1
==:是否可以等于
+1:是否可以+1
1.集合的長度和集合的索引問題基公!(邊界條件)
或者說是開閉區(qū)間
2.?中間的索引,2種辦法:
第一種: int middle = left + (right - left) / 2; // 中間的位置得到
2. 最大值:Math.max()
1.node和treenode數(shù)據(jù)結(jié)構(gòu)
2者的區(qū)別:
// 取出棧頂?shù)脑?/p>
String peekString = stack.peek();
String popString = stack.pop();
組合題目
1.棧+哈希表? ?496
椝纹郏或者隊列的使用:
雙層list的使用轰豆,LinkedList嵌套用處
LinkedList<List<Integer>> result = new LinkedList<>();? ?? // LinkedList
插入到第一個位置:
LinkedList> result =new LinkedList<>();? ? // LinkedList
result.addFirst(new ArrayList<>(list)); //? LinkedList的作用
內(nèi)循環(huán)和外循環(huán)的使用胰伍?while內(nèi)循環(huán)和外循環(huán)
什么適合用while循環(huán),什么適合用for循環(huán)秒咨?if的作用喇辽。
變量是放內(nèi)循環(huán)還是外循環(huán)。放哪個位置S晗F凶伞!
do()whi()的使用!
2個元素交換
temp = nums[i]; // 保持0的值
nums[i] = nums[j];
nums[j] = temp;? // 交互用temp值
-----------------------------------------------
重點:單項突破題目