(案例一)四数和为特定值
题目
找出列表中四数和为特定值的不重复所有情况,比如原列表[1,3,5,6,0,4,2],特定值为10,那么返回的应该是[[2,3,5,0],[1,4,5,0],[1,0,3,6]].
目标细化
①必须是列表中的四个位置不重复的数(但如果列表本身是[2,2,2,2,2,2,2,2],特定值为8,那返回的是[[2,2,2,2]]是可以接受的,因为这里的数字重复理解为来自原列表不同位置的2)
②四个数和为特定值
③返回的是这四个数,以列表中的列表 list[list[int]] 的形式,且其中每种组合是不重复的:[1,2,3,0]和[2,3,0,1]认为是同一组合
④时间复杂度不要超过O(n2)
暴力算法筑理解根基
实不相瞒,这道题把我逼疯了一整天,我们先来暴力算法理解一下这道题目的做法:暴力思路hin简单,不过就是初中的排列组合思路:要找到四个数,那先确定第一个数,对后面三个数进行遍历搜索;对后面三个数,先确定第一个数,再对剩下两个遍历搜索;再两个数中,确定第一个数,实际最先自由的仅仅是最后一个数:可以在其指定的范围内任意取值。如果最后的这个数再前面三个既定某值的时候在自己可行区域能找到满足要求的就储存下来四数现在所指的结果,如果没有满足的就先移动倒数第三个一位,然后第四个数再在更新后的可行区域内重复;第三个数在可行区域遍历完以后,再移动第二位。。。第二位在自己的可行区域遍历完后,再移动第一位,第一位全都移动完后,这件事就算了了。这事虽是了了,这复杂度也是非常可观的O(n4) {乌鸦飞过}
以下就是这个暴力算法的展示,初入编程的小白应该都懂我:“只要我们够坚强!嵌套循环没人比我更清醒” 哈哈哈当然能理解到已经说明对题目有清晰的认识了,但是好的算法需要时间空间的efficiency