leetcode 1019 鍊錶中的下乙個更大節點

2021-10-01 04:16:29 字數 2494 閱讀 2129

這個題目我第一次看到太簡單了吧,暴力就完事了,果不其然,時間複雜度很高,當然結果也是過了,沒什麼難度:

public

int[

]nextlargernodes

(listnode head)

p = p.next;}if

(p == null)

result.

add(0)

; head = head.next;

}int

finalresult =

newint

[result.

size()

];for(

int i =

0; i < finalresult.length;

++i)

return finalresult;

}

但是能看到這個題目是乙個中等難度的題目,所以肯定不是這麼簡單的。而且在做的過程中我看到了結果中有很多重複的元素,所以真相只有乙個:我不會!!!

其實我是思考了的,當然就是簡單的思考,反正也是錯了就不說了,直接看的答案。然後第一眼看上去有單調棧動態規劃,聽於是還沒看下面我就想先自己嘗試重新寫一次。當然動態規劃我前一段剛學過並做了借個題目,於是先寫動態規劃。

動態規劃

dp的遞推公式為:

if nums[i + 1] > nums[i] then dp[i] = nums[i + 1]

if nums[i + 1] == nums[i] then dp[i] = dp[i + 1]

else dp[i] =

public

static

int[

]nextlargernodes1

(listnode head)

int numlength = temp.

size()

;int

nums =

newint

[numlength]

;//存放所有資料的陣列

nums[numlength-1]

= temp.

get(numlength-1)

;int

dp =

newint

[numlength]

;//動態規劃陣列

dp[numlength-1]

=0;int

result =

newint

[numlength]

;//存放最終結果的陣列

for(

int i = nums.length-

2; i >=0;

--i)

else

if(nums[i]

== nums[i+1]

)else}if

(j == numlength)}}

return result;

}

單調棧

單調棧的思路就是從前往後遍歷,讓棧內元素始終是遞減的,如果遇到乙個元素比棧頂大,說明不能滿足遞減,則把棧內所有比當前元素小的都出棧,且對應的result值就是當前元素。直到遇到乙個比當前元素大的棧頂停止,並將當前元素入棧。

最後將所有棧內元素出棧,且對應的值全部設定為0。這裡我們在棧內儲存的有兩個元素,乙個是鍊錶的值,乙個是值所在的位置。

public

int[

]nextlargernodes

(listnode head)

int[

] result =

newint

[numlenght]

;//棧應該存放兩個值,乙個是節點值,乙個是節點所處位置(下標,方便在result中設定值)

stack

> stack =

newstack

<

>()

; stack.

push

(new

pair

<

>

(head.val,0)

);//放第乙個元素的值,及對應的下標0

p = head.next;

int index =1;

//記錄每個節點的位置

while

(p != null)

stack.

push

(new

pair

<

>

(p.val, index));

p = p.next;

index++;}

//將棧內剩餘的元素出棧,並設定對應位置的值為0

while

(!stack.

isempty()

)return result;

}

好了,又get到了一些技能…

leetcode 1019 鍊錶中的下乙個更大節點

鍊錶中的下乙個更大節點 給出乙個以頭節點 head 作為第乙個節點的鍊錶。鍊錶中的節點分別編號為 node 1,node 2,node 3,每個節點都可能有下乙個更大值 next larger value 對於 node i,如果其 next larger node i 是 node j.val,那...

leetcode 鍊錶 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?head null 空鍊錶,回文,返回true head.next null 只有乙個節點的列表,回文,返回tru...

leetcode 鍊錶 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false示例 2 輸入 1 2 2 1輸出 true高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路 利用快慢指標找到中間節點,當快指標走到末尾時,慢指標指向中間節點 交中間節點之後的節點進行鍊錶反轉 設定指標p1從h...