引言
分享一道朋友面试遇到的算法题,这道题是力扣上的原题,还是有一定难度的,但是这类题都有简单的版本,我们将由浅入深,从易到难分析这类题的套路。如下:
分析: 题意就是给定一个整数数组和一个target,要求从数组中找到4个数,使得这4个数的和等于target,求出数组中所有不同的符合条件的四元组。
- 要求的是所有符合条件的四元组,而不是求符合条件的四元组个数或者有没有符合条件的四元组,所以我自然可以想到去暴力搜索,我去搜索所有的组合,然后筛选出符合条件的组合,添加到结果集。
这里求4元组,所以我们可以用4个for循环,这代码写着比较简单我就不写了。还有一种搜索就是回溯,一种利用递归更优雅的搜索。
- 既然是回溯的本质也是一种暴力搜索,那么为了提高搜索效率,自然会想到能不能进行剪枝(就是利用一些条件,提前终止一些无意义的搜索)来提高效率。
常用的剪枝小tip:
因为要求答案中不可以包含重复的四元组,那么常用的去重技巧就是把数组元素进行排序。
代码如下所示:
回溯代码基本都是这样一个模板,在代码中我也进行了注释。