劍指offer第二版易錯總結P1

2021-10-24 04:04:34 字數 3077 閱讀 6158

必須要new乙個dummy,而不是直接建立乙個listnode*,具體原因:

非常規的解法。這種思路只能通過60%的用例:

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

};

只需要加一句話:

swap

(root-

>left-

>right, root-

>right-

>right)

;

就是在每次判斷完之後,交換左子樹的右和右子樹的右,以上思路只能判斷是不是想等的,而不是對稱,若對稱,交換後就是相等的。

思路倒是不難,主要是邊界條件要處理好:不寫這句話就是錯誤……

if

(matrix.

size()

==0|| matrix[0]

.size()

==0);

}

錯在哪兒了呢,就是mins.size()==0,為了圖省事直接寫了mins.top()明顯是不對的

void

push

(int x)

else

}

一看用層次遍歷就比較方便,bfs,但是還是寫錯了,需要注意的是q.size()需要先儲存,因為如果你直接放在for迴圈內,q會因為push而增加長度……

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

else

while

(!q.

empty()

) ans.

push_back

(res);}

return ans;}}

;

小根堆,只輸出前n個即可:

class

solution

; vector<

int> res;

priority_queue<

int, vector<

int>

, less<

int>> q;

for(

int c:arr)

else}}

for(

int i =

0; i < q.

size()

; i++

)return res;}}

;

簡單的動態規劃,比較神奇的是:

這樣對於[1],輸出0,是錯的

class

solution

return m;}}

;

修改一下:nums.size()不減1立刻就成功了……原來是自己設定的判斷條件……

class

solution

return m;}}

;

注意返回空char就是:』 』

返回空字串就是「 」

class

solution

for(

auto c:s)

return

' ';}}

;

是p1==null嗎而不是p1->next

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

return p1;}}

;

「排序陣列中的搜尋問題,首先想到 二分法 解決。」

比較容易想到就是下標和內容不一樣,但是還有更簡單的做法,可以用類似於二分查詢的做法:

class

solution

return l;}}

;

怎麼說呢,還是對自己有自信吧,二叉搜尋樹的中序遍歷是順序排序的,本來覺得不是這麼做,一看解析就是這個方法……

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

return ans;

}void

dfs(treenode* root)}}

;

這種方法比較笨,聰明的是在遍歷的時候就計數,k–了就直接return:

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

void

dfs(treenode* root)

dfs(root-

>left);}}};

先計算出左右子樹高度,再看看是不是大於1,最後自己遞迴:

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

intdfs

(treenode* root)

};

《劍指Offer》第二版之陣列中重複的數字(二)

目錄 題目 在乙個長度為n的陣列裡的所有數字都在0 n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。思路 從頭到尾依次掃瞄這個陣列中的每個數字。當掃瞄到下標...

劍指offer第二版 面試題6(java)

面試題6 從尾到頭列印鍊錶 題目 輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值 鍊錶的結點定義如下 public class listnode 注意 面試中,如果打算修改輸入的資料,最好先問好是否資料是允許修改的 思路 1.遍歷順序從頭到尾,列印順序從尾到頭,第乙個結點最開始被訪問,但是最...

劍指offer第二版 面試題8 java

題目描述 給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標 分析 情況 一 有右子樹,這時只需要把其右孩子作為下乙個遍歷的 並不是要找的 節點,然後沿著該節點的左子樹 如果有的話 出發,直到遇到葉子節點,那麼該葉子節...