seo网站建设步骤,模板网站建设价格,建设公司网站大概需要多少钱?,代理ip访问网站这里写自定义目录标题 解法1:解法2: 给你一个整数数组 nums #xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k #xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。注意#xff1a;答案中不… 这里写自定义目录标题 解法1:解法2: 给你一个整数数组 nums 判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k 同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。注意答案中不可以包含重复的三元组。
示例 1输入nums [-1,0,1,2,-1,-4]
输出[[-1,-1,2],[-1,0,1]]
解释
nums[0] nums[1] nums[2] (-1) 0 1 0 。
nums[1] nums[2] nums[4] 0 1 (-1) 0 。
nums[0] nums[3] nums[4] (-1) 2 (-1) 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意输出的顺序和三元组的顺序并不重要。
示例 2输入nums [0,1,1]
输出[]
解释唯一可能的三元组和不为 0 。
示例 3输入nums [0,0,0]
输出[[0,0,0]]
解释唯一可能的三元组和为 0 。提示3 nums.length 3000
-105 nums[i] 105三数之和-leetCode
解法1:
暴力三重循环
解法2:
排序 双指针
数组为空或长度3直接返回空对原数组进行排序最外层大循环内层双指针 func threeSum(nums []int) [][]int {res : make([][]int, 0)if len(nums) 3 {return res}sort.Ints(nums)for i : 0; i len(nums); i {if nums[i] 0 { // 第一层遍历如果第一个值都大于0了直接返回已有的结果return res}if i 0 nums[i] nums[i-1] { // 关键排序后为了不能有重复元祖continue // 注意这地方不能直接i,要重新进入循环因为可能会有2个以上的重复值}L : i 1R : len(nums) - 1for L R {if nums[i]nums[L]nums[R] 0 {res append(res, []int{nums[i], nums[L], nums[R]})for L R nums[L] nums[L1] { // 去重L}for L R nums[R] nums[R-1] { // 去重R--}LR--} else if nums[i]nums[L]nums[R] 0 {R--} else {L}}}return res
}