Categories
程式開發

深拷貝鍊錶,python處理音頻信號和數字信號、vim教程、swift單元測試和UI測試John 易筋ARTS 打卡Week 21


1. Algorithm: 每周至少做一個LeetCode 的算法題

筆者的文章:

算法:深拷貝鍊錶,其中鍊錶有個隨機指向的指針Copy List with Random Pointer

題目

138.使用隨機指針的複制列表

給定一個鍊錶,使每個節點包含一個附加的隨機指針,該指針可以指向列表中的任何節點或為空。

返回列表的深層副本。

鏈接列表在輸入/輸出中表示為n個節點的列表。 每個節點表示為一對 [val, random_index] 哪裡:

val:代表Node的整數。valrandom_index:隨機指針指向的節點索引(範圍從0到n-1);如果不指向任何節點,則返回null。

範例1:

深拷貝鍊錶,python處理音頻信號和數字信號、vim教程、swift單元測試和UI測試John 易筋ARTS 打卡Week 21 1

Input: head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
Output: [[7,null],[13,0],[11,4],[10,2],[1,0]]

範例2:

深拷貝鍊錶,python處理音頻信號和數字信號、vim教程、swift單元測試和UI測試John 易筋ARTS 打卡Week 21 2

Input: head = [[1,1],[2,1]]
Output: [[1,1],[2,1]]

範例3:

深拷貝鍊錶,python處理音頻信號和數字信號、vim教程、swift單元測試和UI測試John 易筋ARTS 打卡Week 21 3

Input: head = [[3,null],[3,0],[3,null]]
Output: [[3,null],[3,0],[3,null]]

範例4:

Input: head = []
Output: []

說明:給定的鍊錶為空(空指針),因此返回null。

限制條件:

-10000 <= Node.val <= 10000Node.random為null或指向鍊錶中的節點。節點數不會超過1000。

思路分析

next,random都需要指向對象,那麼就需要一個字典,key為對象,value為深拷貝的新對象。兩次循環即可:

第一次循環組裝字典,第二次循環設置next,random。

返回結果為dict[head]

解法一:手動複製鍊錶到字典裡面

def copyRandomList(self, head: 'Node') -> 'Node':
dict = {}
m = n = head
while m:
dict[m] = Node(m.val)
m = m.next
while n:
dict[n].next = dict.get(n.next)
dict[n].random = dict.get(n.random)
n = n.next

return dict.get(head)

解法二:用系統方法先深拷貝整個鍊錶

import collections
def copyRandomListWithOneRound(self, head: 'Node') -> 'Node':
dic = collections.defaultdict(lambda: Node(0))
dic[None] = None
n = head
while n:
dic[n].val = n.val
dic[n].next = dic[n.next]
dic[n].random = dic[n.random]
n = n.next

return dic[head]

2. Review: 閱讀並點評至少一篇英文技術文章

PySDR:使用Python的SDR和DSP指南

https://pysdr.org/content/intro.html

這是一篇介紹python處理音頻信號和數字信號的簡短教程。說的是如果不想看1000頁的教程,用這個教程入門是比較方便的。

軟件無線電(SDR):

使用軟件執行傳統上由硬件執行的信號處理任務的無線電

數字信號處理(DSP):

信號的數字處理,在我們的例子中是RF信號

3. Tips: 學習至少一個技術技巧

筆者的文章:

翻譯:Vim從入門到精通Mac OS

說明

Vim是Mac隨附的免費且功能強大的文本編輯器。在本教程中,我將向您展示此文本編輯器的基礎知識。

Pycharm 開啟vim編輯器後,tab功能不起作用,其實是用> 來縮進。

打開文件

您可以像任何命令行編輯器一樣在Vim中打開文件。

深拷貝鍊錶,python處理音頻信號和數字信號、vim教程、swift單元測試和UI測試John 易筋ARTS 打卡Week 21 4

如果要編輯的文件是life.md,請在“終端”窗口中鍵入:

vim life.md

Vim將在該終端中打開並加載該文件。 Vim是終端程序,而不是圖形系統程序。

Vim模式的基礎

Vim有四種模式:Normal,Insert,Visual和Command。每種模式都在程序狀態欄的左下方顯示其名稱。

當您啟動Vim時,它處於正常模式。您可以使用所有命令鍵來瀏覽文件並開始編輯。當您退出任何其他模式時,Vim會返回到普通模式。

Vim使用a,A,i,I,o和O命令處於插入模式。進入插入模式後,編輯器將保持該模式,直到您按Esc鍵。每按一次其他鍵將直接插入文件中當前光標所在的位置。

當您在正常模式下使用v,V和Ctrl-v命令時,就會出現可視模式。在可視模式下,您可以選擇文本。當您使用導航命令時,從可視模式的開始到退出可視模式的區域是選定的文本。

在正常模式下,只要使用:命令,就會進入命令模式。在命令模式下,您可以執行複雜的編輯功能,文件操作或外殼程序操作。命令模式是唯一一種在狀態行上不顯示任何內容的模式,但是輸入的命令將放置在狀態行下,並鍵入任何其他內容和光標。

保存文件並關閉Vim

在正常模式下,您可以鍵入ZZ保存所有內容並退出。您也可以使用:w!保存文件。 。的:將你置於命令模式中,w ^將寫入文件,以及!強制操作寫沒有問題。或者,您可以鍵入:wq或:wq! 。該q退出編輯器。您也可以使用:q!退出而不保存。

基本光標運動

在普通模式下,您可以在文件中四處移動並對文件進行特定的編輯。該^ h鍵將光標移動到左邊。該升鍵將光標移動到右側。所述Ĵ鍵將光標向下移動一行,而ķ鍵將光標上移一行。要移至下一個單詞,請使用w命令。上一個單詞命令是b。

如果要一次移動多個空格,單詞或行,請先鍵入數字,然後再輸入方向鍵。光標將沿該方向移動該次數。例如,如果鍵入10j,光標將向下移動10行。

通過使用命令模式,您可以將行號切換為絕對或相對:

絕對編號模式是正常的:每行按順序具有唯一編號。相對編號模式顯示當前編輯行以外的行數。

深拷貝鍊錶,python處理音頻信號和數字信號、vim教程、swift單元測試和UI測試John 易筋ARTS 打卡Week 21 5

要使用絕對行編號,可以使用:set number命令。要不顯示行號,請使用:set nonumber命令。

深拷貝鍊錶,python處理音頻信號和數字信號、vim教程、swift單元測試和UI測試John 易筋ARTS 打卡Week 21 6

要設置相對編號,請輸入:set relativenumber。要將其放回絕對編號,請輸入:set norelativenumber。

深拷貝鍊錶,python處理音頻信號和數字信號、vim教程、swift單元測試和UI測試John 易筋ARTS 打卡Week 21 7

通過使用:set number和:set relativenumber設置兩種模式,Vim將顯示當前行以外的所有行的相對編號。當前的編輯行將顯示其絕對編號。

通過使用相對編號模式,您可以使用j或k命令快速查看要移動的行數。例如,要移至List所在的行,請按2j。

要移至行首,請使用0(即零)命令。要移至行尾,請使用$命令。的GG命令將所述光標移動到文件的開頭,而ģ命令將移動到文件的末尾。

4. Share: 分享一篇有觀點和思考的技術文章

筆者寫的博客鏈接

翻譯:iOS Swift單元測試從入門到精通Unit Test和UI測試UITest

說明

編寫測試並不是魅力十足,但是由於測試可以防止您閃亮的應用程序變成臭蟲纏身的垃圾,所以這是必要的。如果您正在閱讀本教程,您已經知道應該為代碼和UI編寫測試,但是可能不知道如何做。

您可能有一個正在運行的應用程序,但是您想測試為擴展該應用程序所做的更改。也許您已經編寫了測試,但是不確定它們是否是正確的測試。或者,您已經開始開發新的應用程序,並想隨身進行測試。

本教程將向您展示:

如何使用Xcode的Test導航器來測試應用程序的模型和異步方法如何使用存根和模擬來偽造與庫或系統對象的交互如何測試UI和性能如何使用代碼覆蓋率工具

在此過程中,您將掌握測試忍者所使用的一些詞彙。

找出要測試的內容

在編寫任何測試之前,了解基礎知識很重要。您需要測試什麼?

如果您的目標是擴展現有應用程序,則應首先為計劃更改的任何組件編寫測試。

通常,測試應涵蓋:

核心功能:模型類和方法及其與控制器的交互最常見的UI工作流程邊界條件Bug修復

測試最佳實踐

首字母縮寫詞FIRST描述了有效單元測試的一組簡明標準。這些標準是:

Fast快速:測試應該快速進行。 Independent/Isolated獨立/隔離:測試不應相互共享狀態。 Repeatable可重複:每次運行測試時,您都應獲得相同的結果。外部數據提供者或併發問題可能會導致間歇性故障。 Self-validating自驗證:測試應完全自動化。輸出應該是“通過”或“失敗”,而不是依賴於程序員對日誌文件的解釋。 Timely及時:理想情況下,應該在編寫要測試的生產代碼之前編寫測試(測試驅動開發)。

遵循FIRST原則將使您的測試清晰且有用,而不是成為您應用程序的障礙。