垃圾小白羊的leetcode刷題記錄7

2021-10-08 11:46:46 字數 1836 閱讀 1224

我的解法:

class

solution

:def

reversebetween

(self, head: listnode, m:

int, n:

int)

-> listnode:

count =

0 dummy = listnode(

) dummy.

next

= head

p = dummy

inv_nodes =

while count <= n:

if count == m-1:

first_pre = p

if m <= count <= n:

p = p.

next

count +=

1for i in

range

(len

(inv_nodes)-1

,0,-

1): inv_nodes[i]

.next

= inv_nodes[i-1]

first_pre.

next

= inv_nodes[-1

] inv_nodes[0]

.next

= p return dummy.

next

定義乙個偽頭節點,從偽頭節點開始遍歷一遍鍊錶,遍歷過程中計數,遍歷到第m-1個節點時,用指標first_pre記錄指向節點,將第m到第n個節點儲存到列表中。遍歷到第n+1個節點時,停止遍歷,此時p指向第n+1個節點。將列表中的節點從後往前反向鏈結,在將first_pre指向列表最後乙個節點,即將原鍊錶頭部接上翻轉後的鍊錶,而列表第乙個節點指向指標p即接上剩餘原鍊錶。時間複雜度最壞情況為o(n),空間複雜度o(n)。

大佬解法:

class

solution

:def

reversebetween

(self, head: listnode, m:

int, n:

int)

-> listnode:

count =

1 dummy = listnode(

) dummy.

next

= head

pre, cur = dummy, head

while count <= n:

if count == m:

fp = pre

if m+

1<=count<=n:

third = cur.

next

cur.

next

= pre

pre = cur

cur = third

else

: cur = cur.

next

pre = pre.

next

count +=

1 fp.

next

.next

= cur

fp.next

= pre

return dummy.

next

利用三個指標可以實現一次遍歷修改鍊錶方向o(n),空間複雜度o(1)。

XDOJ1184 貪心的小白羊

description 喜羊羊 美羊羊 懶羊羊 沸羊羊 慢羊羊 軟綿綿 紅太狼 灰太狼 別看我只是乙隻羊 綠草因為我變得更香 天空因為我變得更藍 白雲因為我變得柔軟 eva家裡想養很多小白羊,每個小白羊都要每天至少吃一定量的食物為base i 小白羊總是很貪心,如果她看到eva家裡養有m隻羊,那麼她...

演算法小白 LeetCode刷題篇(一)

題目指路 題目描述 編寫乙個函式,以字串作為輸入,反轉該字串中的母音字母。示例 1 輸入 hello 輸出 holle 示例 2 輸入 leetcode 輸出 leotcede 思路一 比較菜的雙指標 兩邊的指標逐漸向中間逼近,直到兩指標重合跳出迴圈。兩指標移動的時候分為以下幾種情況 1.當左指標沒...

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...