最近在刷leetcode,在Array分类中经常遇到“给定一个TargetNumber和一个Array,在Array中找出n个数,这n个数之和等于TargetNumber”的问题。随着n的值增大,题目的难度也会增大。当n取一个具体值时,该题目就会变成其他题目的变种。比如当n = 1时,就变成了简单的一维数组查找问题。本文通过对比n取不同值时的解题思路,抽象出一种通用解法。
注:本文聚焦算法本身的思想,解法中不考虑重复解问题。
1)n = 1时。此时就是典型的一维数组查找问题。推荐的解法是“排序+二分查找”。此处就不上代码了。
2)n = 2时。思路:
(1)按升序排序;
(2)ptr1和ptr2表示待搜索的2个位置,初始时将ptr1指向数组头,将ptr2指向数组尾;
(3)开始搜索,若指针所指的2数之和大于target number时,ptr2向队首移动一位,若指针所指的2数之和小于targetnumber时,ptr1向队尾移动一位,当2数之和与targetnumber相等时,2个指针所指的数即为结果。
Sample code:
vector<vector<int>> FindTwoSum(vector<int>& nums, int target)
{
vector<vector<int>> res;
int n = nums .size();
if(2 > n) return res;