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