人类进步的阶梯
算法和数据结构
滑动窗口go模板
nSum问题解决模板
【链表问题】
21. 合并两个有序链表
23. 合并 K 个升序链表
19. 删除链表的倒数第 N 个结点
876. 链表的中间结点
141. 环形链表
redis
tx
一些QA
【Redis】
rehash
击穿、穿透、雪崩
【计算机网络】
TCP
【Mysql】
索引
资料索引
本文档使用 MrDoc 发布
-
+
首页
nSum问题解决模板
```go // nums 为有序非递减数组 func nSumTarget(nums []int, n int, target int, start int) [][]int { length := len(nums) res := [][]int{} // 至少是 2Sum,且数组大小不应该小于 n if n < 2 || length < n { return res } // 2Sum 是 base case if n == 2 { // 双指针 l := start r := length - 1 for l < r { left := nums[l] right := nums[r] sum := left + right if sum == target { res = append(res, []int{left, right}) for l < r && nums[l] == left { l ++ } for l < r && nums[r] == right { r -- } } if sum < target { for l < r && nums[l] == left { l ++ } } if sum > target { for l < r && nums[r] == right { r -- } } } } else { // n > 2 时,递归计算 (n-1)Sum 的结果 for i := start; i < length; i ++ { t := target - nums[i] r2 := nSumTarget(nums, n - 1, t, i + 1) for _, item := range r2 { // (n-1)Sum 加上 nums[i] 就是 nSum res = append(res, append(item, nums[i])) } for i < length - 1 && nums[i] == nums[i+1] { i ++ } } } return res } ```
adminadmin
2024年6月2日 16:25
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码