小白刷題之路Day22 演算法分類總結

2022-05-05 12:54:14 字數 2050 閱讀 3556

第一部分

重難點在於常見的智力性、數學性的非程式設計技巧。

一、貪心法

貪心法符合我們思維方式,把問題分為一步接著一步,重點在於找到每一步的策略。

劍指offer 剪繩子

二、數學歸納法(找規律)

劍指offer 整數中1出現的次數

劍指offer給的是遞迴演算法(分治、回溯?),每次消去最高數字,求最高數字存在與否時,1個數變化。

牛逼演算法用的就是數學歸納法(找規律),統計數字每一位出現的1的次數。

leetcode z字形變換

按行計算,計算每一行可以取哪些值。

三、數學問題

數學歸納法其實嚴格來說也屬於數學問題,但是由於太常見,單獨作為一節,本節數學問題解決需要深厚的數學功底來解決。

劍指offer 把陣列排成最小的數

這個問題需要自己定義排序規則,實質是乙個排序問題,這需要身後的數學功底作為依託才能想出來。而證明排序規則與排序結果即為所求這兩點需要更深厚的數學功底。

第二部分

常見的程式設計性技巧與思想,小白一般沒有接觸過,需要先學習理解後加以練習

四、雙指標

(1)此題雙指標演算法是對動態規劃演算法的空間複雜度的優化,還可以用棧的貪心演算法做(略)

(2)雙指標滑動視窗法

無重複字元的最長子串

滑動視窗法之雙指標 + 簡單雜湊表

五、動態規劃

(簡單動態規劃)

劍指offer 連續子陣列的最大和

劍指offer 構建乘積陣列

斐波那契數列

跳台階&爬樓梯

(複雜動態規劃)

此題動態規劃演算法可以用雙指標演算法進行空間複雜度的優化,還可以用棧的貪心演算法做(略)

六、深度優先遍歷dfs

(一直搞不明白dfs、回溯、遞迴的關係,這兩天找一找答案,在此記錄一下!)

ans2: 回溯搜尋是深度優先搜尋(dfs)的一種

對於某乙個搜尋樹來說(搜尋樹是起記錄路徑和狀態判斷的作用),回溯和dfs,其主要的區別是,回溯法在求解過程中不保留完整的樹結構,而深度優先搜尋則記下完整的搜尋樹。

為了減少儲存空間,在深度優先搜尋中,用標誌的方法記錄訪問過的狀態,這種處理方法使得深度優先搜尋法與回溯法沒什麼區別了。

leetcode 全排列

leetcode **號碼簿

leetcode 括號生成

七、遞迴

劍指offer:整數中1出現的次數

前一天晚上:這道題好有難度,寫了半晚上還是功虧一簣,看了書上解法才弄出來。就在要翻過這道題的時候,看到了牛客網上前幾名的解法,瞬間給跪了。又花了半晚上,勉強看懂,太牛了。

第二天:早上起來再想昨晚看到的解法,劍指offer給的是遞迴演算法(分治、回溯?),牛逼演算法用的是數學歸納法,接地氣一點的說法就是找規律。

第三部分

其他程式設計技巧,包括位運算、雜湊運算等。

位運算劍指offer 二進位制中1的個數

疑惑:負數1000 -1以後是0111嗎,這不是就變為正數了嗎?

劍指offer 不用四則運算實現加法

c++中,除了四則運算只剩下位運算,通過位運算技巧可以實現。

劍指offer 陣列中只出現一次的兩位數字

1)題目描述:陣列中有兩個數字只出現一次,其餘數字皆出現兩次,求著兩個只出現一次的數字?

基本問題:只有乙個數字出現一次,其餘兩次,用所有數字求異或即可解決,現在需要推廣的兩個數字。

這倆個數字肯定不同,求異或肯定有某一位為1(最少一位),也就是說這兩個數字在這個二進位制位上分別為1和0,按這個原則將原陣列分為兩個陣列,轉化為剛才的基本問題。

註明:0和n異或結果為n;

2)題目描述:只有乙個數字出現一次,其餘數字皆出現三次,求僅出現一次的數字?

基本問題的求異或方法在這不行,可以將所有數字二進位制按位相加,存放於陣列,統計各位1出現的次數,陣列最終對3取餘,餘數即為所求數字的二進位制形式!!!

雜湊運算

劍指offer 陣列中只出現一次的數字

雜湊演算法、位運算演算法

leetcode 整數轉羅馬數字

(待續)

小白之路由淺入深之 day22

實現方式二 實現方式三 演示 方式一的執行緒類 public class myrunnable implements runnable public class lambdademo start 方式三 newthread start 函式式程式設計思想概述 函式式思想則盡量忽略物件導向的複雜語法 ...

每日演算法 day 22

那些你早出晚歸付出的刻苦努力,你不想訓練,當你覺的太累了但還是要咬牙堅持的時候,那就是在追逐夢想,不要在意終點有什麼,要享受路途的過程,或許你不能成就夢想,但一定會有更偉大的事情隨之而來。mamba out 2020.3.6 廣度優先搜尋 include include include includ...

leetcode 小白刷題之路 Day1

no.1 經典的動態規劃入門題目 跳台階問題,連續提交三四次沒有通過,記錄一下教訓。跳台階 提交問題 class solution def climbstairs self,n int int dp i for i in range n 1 i 2 while i 2 and i n dp i dp...