用 Rand7() 实现 Rand10()
拒绝采样的问题,用一个随机数生成另一个随机数,可以用建立一张二维表,扩大数的范围,根据坐标均匀编排数字。
填充每个节点的下一个右侧节点指针
层次遍历基于广度优先搜索,它与广度优先搜索的不同之处在于,广度优先搜索每次只会取出一个节点来拓展,而层次遍历会每次将队列中的所有元素都拿出来拓展
queue 队列的每一层都是可以先用size获取它的层数进行。
全排列
直观的想法是看每一个空可以填哪一个剩下的数。
但其实可以在原来的数组出发,划分为左右已经填好的数,在一个指针的地方,指向当前需要填的数。再用右边的数字填上左边的空白。此时的操作就是交换。每一次回溯完之后要撤销掉之前的一步操作。
踩坑:
在 Python 中,对象赋值实际上是对象的引用。当你创建一个对象,然后把它赋给另一个变量的时候,Python 并没有拷贝这个对象,而只是拷贝了这个对象的引用。与之类似,列表类型的对象进行 append 操作时,实际上追加的也是该对象的引用,而不是直接拷贝该对象。
颜色分类。
对于小的颜色三个色彩。用双指针可以做到一次扫描就可以对它进行排序。它的思想是维护一个0 1 增长的下标,扫描到一,直接和队头的指针交换值。
但是当扫描到0时,就不能直接交换了,因为当p0变小之后指向的是1交换之后,队头的1指针指向的地方就有可能大于1,造成乱序,所以还需要进一步交换一下,然后1的队头再次前进。
这篇博客探讨了如何使用Rand7()实现Rand10(),并介绍了层次遍历和全排列的算法。还提到了Python中对象赋值的引用特性,并分享了颜色分类问题的双指针解决方案。同时,讨论了在解决编程问题时遇到的陷阱,如列表操作的引用问题。
598

被折叠的 条评论
为什么被折叠?



