基本演算法學習day1

2021-10-24 04:49:42 字數 3742 閱讀 3002

反轉陣列

leecode242. 有效的字母異位詞

方法:

建立26位的int陣列,用來存放對應第幾個字母的個數

遍歷 s讓相應的值++ ,遍歷 t讓相應的值 - -

最後如果陣列中有乙個值不為0則返回false

//給定兩個字串 s 和 t ,編寫乙個函式來判斷 t 是否是 s 的字母異位詞。 

//// 示例 1:

//// 輸入: s = "anagram", t = "nagaram"

//輸出: true

// //

// 示例 2:

//// 輸入: s = "rat", t = "car"

//輸出: false

//// 說明:

//你可以假設字串只包含小寫字母。

class

solution

char

chars1 = t.

tochararray()

;for

(int i =

0; i < chars1.length; i++

)for

(int i =

0; i < num.length; i++

)return

true;}

}

結題技巧

利用快慢指標,有時候需要用到三個指標

鍊錶的反轉,尋找倒數第k個元素,判斷鍊錶是否有環

構建乙個虛假的煉表頭

給定排好序的鍊錶,將他們整合 並且排序

將鍊錶的奇偶數按原定順序分離,生成前半部分為奇數,後半部分為偶數的鍊錶

在解決鍊錶的題目時,在紙上或者白板上畫出節點之間的相互關係

leecode25. k個一組翻轉鍊錶

方法:

用三個指標,前指標,當前指標,下乙個指標

開始前指標指向第乙個指標的上乙個,當前指標和下乙個指標遍歷,進行翻轉,結束後,下乙個指標指向了下乙個k的頭,當前指標(原來的尾,現在的頭)與前指標相連,原來的頭(現在的尾)與下乙個指標相連。

繼續遍歷下乙個k。

//給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。 

//// k 是乙個正整數,它的值小於或等於鍊錶的長度。

//// 如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。

////

//// 示例:

//// 給你這個鍊錶:1->2->3->4->5

//// 當 k = 2 時,應當返回: 2->1->4->3->5

//// 當 k = 3 時,應當返回: 3->2->1->4->5

class

solution

return dummy.next;

}void

reserve

(listnode now)

}}

//請根據每日 氣溫 列表,重新生成乙個列表。對應位置的輸出為:要想觀測到更高的氣溫,至少需要等待的天數。如果氣溫在這之後都不會公升高,請在該位置用 0 來代替。

// //

// 例如,給定乙個列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的輸出應該是 [1, 1, 4, 2

//, 1, 1, 0, 0]。

class

solution

}public

int[

]dailytemperatures

(int

t)stack.

push

(new

entry

(t[i]

,i));}

return result;

}}

雙端佇列
//給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。 

//// 返回滑動視窗中的最大值。

//// 示例:

//// 輸入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3

//輸出: [3,3,5,5,6,7]

//解釋:

//// 滑動視窗的位置 最大值

//--------------- -----

//[1 3 -1] -3 5 3 6 7 3

// 1 [3 -1 -3] 5 3 6 7 3

// 1 3 [-1 -3 5] 3 6 7 5

// 1 3 -1 [-3 5 3] 6 7 5

// 1 3 -1 -3 [5 3 6] 7 6

// 1 3 -1 -3 5 [3 6 7] 7

class

solution

while

(!queue.

isempty()

&& queue.

getlast()

) queue.

add(nums[i]);

} result.

add(queue.

getfirst()

);for(

int i = k; i ) queue.

add(nums[i]);

if(queue.

getfirst()

==nums[i-k]

) queue.

removefirst()

; result.

add(queue.

getfirst()

);}int

rr=

newint

[result.

size()

];for(

int i =

0; i )return rr;

}}

void

toarray

(treenode root,list

list)

leecode230.二叉搜尋中第k小的元素

方法:

二叉樹中序遍歷,新增到list中 返回第k-1個元素

如果這道題變成了 搜尋第k大的元素:則將其變成了反向的中序遍歷:右 ;add();左;

//給定乙個二叉搜尋樹,編寫乙個函式 kthsmallest 來查詢其中第 k 個最小的元素。 

//// 說明:

//你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜尋樹元素個數。

//// 示例 1:

//// 輸入: root = [3,1,4,null,2], k = 1

// 3

// / \

// 1 4

// \

// 2

//輸出: 1

class

solution

void

toarray

(treenode root,list

list)

}

路徑規劃演算法學習Day1

解決最短路徑問題的演算法有很多,dijkstra演算法是其中最為有效的一種。它是於1959年荷蘭計算機科學家edsger dijkstra提出的 能夠解決 單結點 所有結點 間的最短路徑問題。首先以某一結點 源結點 作為出發點,在與其相連且尚未被加入的結點裡,選擇加入離出發點距離最短的結點,並且通過...

力扣演算法 day1 今天的演算法學習

感覺自己前兩天發布的時候忘了提自己為什麼要開這個系列了,特於19 3 23來補一下 主要是前兩天想去面實習生,面了個大公司,然後一上來問我最簡單的演算法題我就不會。感覺太給川大人丟臉了,得努力了呢 好了,下面請看官們看正文 我是分割線 13.羅馬數字轉整數 羅馬數字包含以下七種字元 i,v,x,l,...

排序演算法Day1

include mysort.h include include include include include include include using namespace std 插入排序 時間複雜度 平均哦o n 2 完全有序時o n 空間複雜度o 1 穩定 思想 把待排序列分為有序序列和無...