刷题刷刷刷

这篇博客探讨了如何使用Rand7()实现Rand10(),并介绍了层次遍历和全排列的算法。还提到了Python中对象赋值的引用特性,并分享了颜色分类问题的双指针解决方案。同时,讨论了在解决编程问题时遇到的陷阱,如列表操作的引用问题。

用 Rand7() 实现 Rand10()

拒绝采样的问题,用一个随机数生成另一个随机数,可以用建立一张二维表,扩大数的范围,根据坐标均匀编排数字。在这里插入图片描述

填充每个节点的下一个右侧节点指针

层次遍历基于广度优先搜索,它与广度优先搜索的不同之处在于,广度优先搜索每次只会取出一个节点来拓展,而层次遍历会每次将队列中的所有元素都拿出来拓展

queue 队列的每一层都是可以先用size获取它的层数进行。

全排列

直观的想法是看每一个空可以填哪一个剩下的数。
但其实可以在原来的数组出发,划分为左右已经填好的数,在一个指针的地方,指向当前需要填的数。再用右边的数字填上左边的空白。此时的操作就是交换。每一次回溯完之后要撤销掉之前的一步操作。

踩坑:
在 Python 中,对象赋值实际上是对象的引用。当你创建一个对象,然后把它赋给另一个变量的时候,Python 并没有拷贝这个对象,而只是拷贝了这个对象的引用。与之类似,列表类型的对象进行 append 操作时,实际上追加的也是该对象的引用,而不是直接拷贝该对象。

颜色分类。

对于小的颜色三个色彩。用双指针可以做到一次扫描就可以对它进行排序。它的思想是维护一个0 1 增长的下标,扫描到一,直接和队头的指针交换值。
但是当扫描到0时,就不能直接交换了,因为当p0变小之后指向的是1交换之后,队头的1指针指向的地方就有可能大于1,造成乱序,所以还需要进一步交换一下,然后1的队头再次前进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值