kSum问题是一类问题,基本的方法是两个循环,其他一个查找,但是今天碰到了一个超级棘手的问题,是3Sum问题的一个变型
问题:给定一个数组,给定一个整数k,要求找出在数组中找到3个整数,使得这三个整数的和与k的相差最小!
思路:最受不了这种最大值最小值类的问题啦!如果是个确定的数还能通过一些二分查找、hash查找这样的方法来找,但是最大最小这类问题,需要自己处理找不到的情况!如果找不到这个值的话怎么办?那么我就在数组查找到这个target前后的两个值,然后比较一下即可!
编程:
1)lower_bound函数中第一个参数要保证小于第二个参数
2)编程时注意通过以下方式减少计算,for(i = 0; i <size; i++) for( j = i; j < size; j++) ... lower_bound(a.begin()+j+1,a.end);
答案:https://github.com/honpey/codebox/blob/master/leetcode/array/p16.cpp