微软和谷歌的几个大佬组织了一个面试刷题群,可以加管理员VX:sxxzs3998(备注CSDN),进群参与讨论和直播
看此文之前建议先看前文 【微软算法面试高频题】改编twoSum 问题
一、threeSum
这是 LeetCode 第 15 题:

这个问题怎么解决呢?很简单,穷举呗。现在我们想找和为 target 的三个数字,那么对于第一个数字,可能是什么?nums 中的每一个元素 nums[i] 都有可能!
那么,确定了第一个数字之后,剩下的两个数字可以是什么呢?其实就是和为target - nums[i] 的两个数字呗,那不就是 twoSum 函数解决的问题么🤔
可以直接写代码了,需要把 twoSum 函数稍作修改即可复用:
/* 从 nums[start] 开始,计算有序数组
* nums 中所有和为 target 的二元组 */
vector<vector<int>> twoSumTarget(
vector<int>& nums, int start, int target) {
// 左指针改为从 start 开始,其他不变
int lo = start, hi = nums.size() - 1;
vector<vector<int>>

本文介绍了如何解决LeetCode中的N-Sum问题,从threeSum开始,逐步解析fourSum和nSum的解题思路。通过穷举和双指针策略,给出通用的nSum解决方案,并强调了先排序的重要性,以确保算法效率。

388

被折叠的 条评论
为什么被折叠?



