笔者的文章:
算法:深拷贝链表,其中链表有个随机指向的指针Copy List with Random Pointer
138. Copy List with Random Pointer
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
The Linked List is represented in the input/output as a list of n nodes. Each node is represented as a pair of [val, random_index] where:
Example 1:
Input: head = [[7,null],[13,0],[11,4],[10,2],[1,0]]Output: [[7,null],[13,0],[11,4],[10,2],[1,0]]
Example 2:
Input: head = [[1,1],[2,1]]Output: [[1,1],[2,1]]
Example 3:
Input: head = [[3,null],[3,0],[3,null]]Output: [[3,null],[3,0],[3,null]]
Example 4:
Input: head = []Output: []
Explanation: Given linked list is empty (null pointer), so return null.
Constraints:
next,random都需要指向对象,那么就需要一个字典,key为对象,value为深拷贝的新对象。两次循环即可:
返回结果为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]
https://pysdr.org/content/intro.html
这是一篇介绍python处理音频信号和数字信号的简短教程。说的是如果不想看1000页的教程,用这个教程入门是比较方便的。
Software-Defined Radio (SDR):
A radio that uses software to perform signal-processing tasks that were traditionally performed by hardware
Digital Signal Processing (DSP):
The digital processing of signals, in our case RF signals
笔者的文章:
Vim是Mac随附的免费且功能强大的文本编辑器。在本教程中,我将向您展示此文本编辑器的基础知识。
Pycharm 开启vim编辑器后,tab功能不起作用,其实是用>
来缩进。
您可以像任何命令行编辑器一样在Vim中打开文件。
如果要编辑的文件是life.md,请在“终端”窗口中键入:
vim life.md
Vim将在该终端中打开并加载该文件。Vim是终端程序,而不是图形系统程序。
Vim有四种模式:Normal,Insert,Visual和Command。每种模式都在程序状态栏的左下方显示其名称。
当您启动Vim时,它处于正常模式。您可以使用所有命令键来浏览文件并开始编辑。当您退出任何其他模式时,Vim会返回到普通模式。
Vim使用a,A,i,I,o和O命令处于插入模式。进入插入模式后,编辑器将保持该模式,直到您按Esc键。每按一次其他键将直接插入文件中当前光标所在的位置。
当您在正常模式下使用v,V和Ctrl-v命令时,就会出现可视模式。在可视模式下,您可以选择文本。当您使用导航命令时,从可视模式的开始到退出可视模式的区域是选定的文本。
在正常模式下,只要使用:命令,就会进入命令模式。在命令模式下,您可以执行复杂的编辑功能,文件操作或外壳程序操作。命令模式是唯一一种在状态行上不显示任何内容的模式,但是输入的命令将放置在状态行下,并键入任何其他内容和光标。
在正常模式下,您可以键入ZZ保存所有内容并退出。您也可以使用:w!保存文件。。的:将你置于命令模式中,w ^将写入文件,以及!强制操作写没有问题。或者,您可以键入:wq或:wq!。该q退出编辑器。您也可以使用:q!退出而不保存。
在普通模式下,您可以在文件中四处移动并对文件进行特定的编辑。该^ h键将光标移动到左边。该升键将光标移动到右侧。所述Ĵ键将光标向下移动一行,而ķ键将光标上移一行。要移至下一个单词,请使用w命令。上一个单词命令是b。
如果要一次移动多个空格,单词或行,请先键入数字,然后再输入方向键。光标将沿该方向移动该次数。例如,如果键入10j,光标将向下移动10行。
通过使用命令模式,您可以将行号切换为绝对或相对:
要使用绝对行编号,可以使用:set number命令。要不显示行号,请使用:set nonumber命令。
要设置相对编号,请输入:set relativenumber。要将其放回绝对编号,请输入:set norelativenumber。
通过使用:set number和:set relativenumber设置两种模式,Vim将显示当前行以外的所有行的相对编号。当前的编辑行将显示其绝对编号。
通过使用相对编号模式,您可以使用j或k命令快速查看要移动的行数。例如,要移至List所在的行,请按2j。
要移至行首,请使用0(即零)命令。要移至行尾,请使用$命令。的GG命令将所述光标移动到文件的开头,而ģ命令将移动到文件的末尾。
笔者写的博客链接
翻译:iOS Swift单元测试 从入门到精通 Unit Test和UI测试 UITest
编写测试并不是魅力十足,但是由于测试可以防止您闪亮的应用程序变成臭虫缠身的垃圾,所以这是必要的。如果您正在阅读本教程,您已经知道应该为代码和UI编写测试,但是可能不知道如何做。
您可能有一个正在运行的应用程序,但是您想测试为扩展该应用程序所做的更改。也许您已经编写了测试,但是不确定它们是否是正确的测试。或者,您已经开始开发新的应用程序,并想随身进行测试。
本教程将向您展示:
在此过程中,您将掌握测试忍者所使用的一些词汇。
在编写任何测试之前,了解基础知识很重要。您需要测试什么?
如果您的目标是扩展现有应用程序,则应首先为计划更改的任何组件编写测试。
通常,测试应涵盖:
首字母缩写词FIRST描述了有效单元测试的一组简明标准。这些标准是:
遵循FIRST原则将使您的测试清晰且有用,而不是成为您应用程序的障碍。
领取专属 10元无门槛券
私享最新 技术干货