【微软算法面试高频题】改编 N Sum 问题

微软和谷歌的几个大佬组织了一个面试刷题群,可以加管理员VX:sxxzs3998(备注CSDN),进群参与讨论和直播

看此文之前建议先看前文 【微软算法面试高频题】改编twoSum 问题

一、threeSum

这是 LeetCode 第 15 题:

【微软算法面试高频题】改编 N Sum 问题_第1张图片

这个问题怎么解决呢?很简单,穷举呗。现在我们想找和为 target 的三个数字,那么对于第一个数字,可能是什么?nums 中的每一个元素 nums[i] 都有可能!

那么,确定了第一个数字之后,剩下的两个数字可以是什么呢?其实就是和为target - nums[i] 的两个数字呗,那不就是 twoSum 函数解决的问题么

可以直接写代码了,需要把 twoSum 函数稍作修改即可复用:

/* 从 nums[start] 开始,计算有序数组
 * nums 中所有和为 target 的二元组 */
vector> twoSumTarget(
    vector& nums, int start, int target) {
    // 左指针改为从 start 开始,其他不变
    int lo = start, hi = nums.size() - 1;
    vector> res;
    while (lo < hi) {
        ...
    }
    return res;
}
​
/* 计算数组 nums 中所有和为 target 的三元组 */
vector> threeSumTarget(vector& nums, int target) 

你可能感兴趣的:(算法,leetcode,面试)