python中處理鍊錶時特別注意引用傳遞的問題

2021-08-20 22:10:28 字數 1155 閱讀 9700

刷題刷到劍指offer第57題(刪除鍊錶(已排序)中重複的結點)時,按照自己的思路做的,發現輸出結果時出現過以下問題:

做題思路:鍊錶相當於乙個前後有關係的陣列,於是先把此題當做刪除陣列中重複的元素來思考,立馬想到可以借用python中的字典來統計每個數字出現的頻數(這樣遍歷一次的時間複雜度為o(n)),然後在通過遍歷陣列,通過判斷該數字是否只出現一次,如果只出現一次則把它放進新的陣列中,這樣就把陣列中重複的元素刪除了(空間複雜度為o(n))。因此這道題也借用這種思路做。

步驟:(1)遍歷一次鍊錶,統計每個結點的值出現的頻數;

(2)遍歷一次鍊錶,如果結點值的頻數為1,那麼建立乙個新結點,並與已有結點相連(如果是頭結點,則直接建立)。

遇到的問題:

(1)測試例項為,輸出為。錯誤原因:對於只出現一次的結點,採用直接複製,導致後面重複的結點沒有做處理。

(2)測試例項為,輸出為。錯誤原因:由於第乙個錯誤是沒有對只出現一次的結點後面重複的結點做處理,於是就直接在只出現一次的結點後面直接加了一條語句,這導致步驟二還沒有遍歷完鍊錶就直接退出了。出現這個錯誤的原因是在python中,對於可變物件,直接複製意味著兩個變數引用指向同乙個位址,只要內容改變,兩個變數引用的值都發生變化。

注意:由於這道題鍊錶是有序的,所以肯定有更簡便的方法。假如這道題的鍊錶是無序時,也可以按照這個思路做。

表的資料量特別大時是怎麼處理的

1 索引優化和sql語句優化是必須的,避免模糊查詢和非索引查詢,刪改操作根據聚集索引進行,刪改操作太頻繁的話還是需要考慮分表 2 看需求,如果需求不限制,那就分表 分割槽會增加管理複雜度和成本這個很難理解,分割槽增加不了多少工作,如果需求要求必須單錶,分割槽是解決在千萬到幾億資料量的比較合適的方法 ...

python 處理dataframe中的時間字段

在機器學習過程中,通常會通過pandas讀取csv檔案,保持成dadaframe格式,然而有時候需要對dataframe中的時間字段進行資料建模,比如時間格式為datetime,那麼像一般操作dataframe的方式來操作時間欄位會報錯的,所以在使用sklearn庫進行fit和predict的時候,...

PYTHON中的鍊錶

鍊錶 linked list 是由一組被稱為結點的資料元素組成的資料結構,每個結點都包含結點本身的資訊和指向下乙個結點的位址。由於每個結點都包含了可以鏈結起來的位址資訊,所以用乙個變數就能夠訪問整個結點序列。也就是說,結點包含兩部分資訊 一部分用於儲存資料元素的值,稱為資訊域 另一部分用於儲存下乙個...