力扣學習筆記day16

2021-10-17 23:13:44 字數 2846 閱讀 1873

請編寫乙個函式,使其可以刪除某個鍊錶中給定的(非末尾)節點。傳入函式的唯一引數為 要被刪除的節點 。

現有乙個鍊錶 – head = [4,5,1,9],它可以表示為:

輸入:head = [4,5,1,9], node = 5

輸出:[4,1,9]

解釋:給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 1 -> 9.

本題需要注意的點就是給定的引數只有要刪除的節點,而我們一般對鍊錶的刪除操作最常用的做法是對刪除節點的前乙個節點進行操作。

比如前乙個節點為prev,那麼只需要令prev.next = node.next,就能把node給刪除了。

而本題中無法獲取node的前乙個鍊錶,只能轉換做法,把node的下乙個節點複製到node,而後刪除這個節點,這樣也相當於刪除了node。

node.val=node.

next

.val

node.

next

=node.

next

.next

給你乙個長度為 n 的整數陣列 nums,其中 n > 1,返回輸出陣列 output ,其中 output[i] 等於 nums 中除 nums[i] 之外其餘各元素的乘積。

eg

輸入:[1,2,3,4]

輸出:[24,12,8,6]

說明:請不要使用除法,且在 o(n) 時間複雜度內完成此題。

高階:

你可以在常數空間複雜度內完成這個題目嗎?( 出於對空間複雜度分析的目的,輸出陣列不被視為額外空間。)

看到題目我們馬上能想到的方法就是先計算乙個總乘積,然後對陣列進行遍歷,每次在輸出陣列上新增總乘積處理當前數。 但由於說明中要求不能使用出發,所以排除了。

如果選擇遍歷時將除當前數之外的所有數乘起來,則時間複雜度會達到o(n

2n^2

n2),也不滿足要求,排除。

上面這個做法之所以會達到 o(n

2n^2

n2) 的時間複雜度,是因為在遍歷時,對於每個數都要重新計算左右的乘積,其實多了很多不必要操作,我們可以先用兩個陣列把從左往右和從右往左的乘積儲存起來,然後在計算輸出陣列的時候就可以直接使用了。

前後分別遍歷,得到左右乘積

一次迴圈,每次將左右乘積相乘,加到輸出陣列

n=len(nums)

left,right=[1]*n,[1]*n

res=

for i in range(1,n):

left[i]=left[i-1]*nums[i-1]

for i in range(n-2,-1,-1):

right[i]=right[i+1]*nums[i+1]

for i in range(n):

return res

時間複雜度為o(n)

上面這個方法進行了三次遍歷,那麼實際上,可以把第二次和第三次合起來。

即先存左邊的乘積,然後從右邊開始遍歷,一邊計算右邊乘積後再乘左邊乘積,一邊新增到輸出陣列。 當然左右順序反過來也可以。

而且,我們再進行簡化,把左乘積陣列和輸出陣列進行合併,這樣就滿足了高階的要求。

n=

len(nums)

res=[1

]*nfor i in

range(1

,n):

res[i]

=res[i-1]

*nums[i-1]

tmp=

1for i in

range

(n-1,-

1,-1

):res[i]

=tmp*res[i]

tmp*=nums[i]

return res

時間複雜度為 o(n),空間複雜度為o(1)

你和你的朋友,兩個人一起玩 nim 遊戲:

桌子上有一堆石頭。

你們輪流進行自己的回合,你作為先手。

每一回合,輪到的人拿掉 1 - 3 塊石頭。

拿掉最後一塊石頭的人就是獲勝者。

假設你們每一步都是最優解。請編寫乙個函式,來判斷你是否可以在給定石頭數量為 n 的情況下贏得遊戲。如果可以贏,返回 true;否則,返回 false 。

eg

輸入:n = 4

輸出:false

解釋:如果堆中有 4 塊石頭,那麼你永遠不會贏得比賽;

因為無論你拿走 1 塊、2 塊 還是 3 塊石頭,最後一塊石頭總是會被你的朋友拿走。

本題是一道博弈論題目,最好的解法就是題意分析,因為取 1,2,3皆可,那麼當你面臨的數字是4時,必然會輸。

由此推導,剩餘4顆石頭的時候是輸,那麼就要避免剩餘四顆

而當剩下的是八顆的時候,你又無法避免會碰到下一輪是四顆石頭的窘境,以此類推就可以發現,只要自己面臨的是四的倍數顆石頭,就必輸無疑。

so,只需要判斷是否剩餘4的倍數顆石頭就行了。

return n%4!=

0

Python學習筆記 Day16

今日大綱 一 物件導向的組合 組合 給乙個類的物件封裝乙個屬性,這個屬性就是另乙個類的物件 組合的意義 讓乙個類的物件和另乙個類的物件產生關係,讓乙個類和另乙個類產生關係 如何組合 1 在類1中定義乙個方法,類1的物件1在執行這個方法的時候能增加乙個屬性,屬性值就是類2的物件2 2 物件1執行這個方...

day16 學習總結

今天學習了可變引數和遞迴。老師還留了一道練習題,寫乙個計算器出來,嘗試琢磨了許久,還是沒有做出來。這也是我基礎薄弱的緣故,明天繼續研究。加油加油!下面是知識點 package com.liangwenwei.方法 public class 可變引數 public void test int x,in...

day16開始學習js

經過前些天的複習,前兩天得以快速完成了day12 15的任務,於是html和css的學習暫時告于段落。總用時約3小時 api分兩種 谷歌地圖 api 高德地圖 api 可以在 嵌入定製的地圖等等。html中input標籤的placeholder屬性 在不輸入時,淺色顯示內容。html doctype...