南阳免费网站建设,百度推广管理系统,php网页制作代码,手机版网页开发牛客网: BM54
题目: 数组中所有不重复的满足三数之和等于0的数#xff0c;非递减形式。
思路: 数组不小于3。不重复非递减#xff0c;需先排序。使用idx从0开始遍历到n-2, 如果出现num[idx]num[idx-1]的情况#xff0c;忽略继续下一个idx#xff1b;令left idx1, right …牛客网: BM54
题目: 数组中所有不重复的满足三数之和等于0的数非递减形式。
思路: 数组不小于3。不重复非递减需先排序。使用idx从0开始遍历到n-2, 如果出现num[idx]num[idx-1]的情况忽略继续下一个idx令left idx1, right n-1双指针迎面而行如果满足num[left]num[right]-num[idx]则获取一个满足条件的解为避免重复分别对left、right一边检测一边移动注意边界条件left1right如果num[left]num[right]-num[idx]则right--否则left。
代码:
// gopackage mainimport sort// import fmt/*** 代码中的类名、方法名、参数名已经指定请勿修改直接返回方法规定的值即可*** param num int整型一维数组* return int整型二维数组*/
func threeSum( num []int ) [][]int {// write code hereif len(num) 3 {return [][]int{}}sort.Ints(num)res : [][]int{}for idx : 0; idx len(num) - 2; idx {if idx 0 num[idx] num[idx-1] {continue}left : idx 1right : len(num) - 1target : -num[idx]for left right {if num[left] num[right] target {res append(res, []int{num[idx], num[left], num[right]})for left 1 right num[left] num[left1] {left}for right - 1 right num[right] num[right-1] {right--}leftright--} else if num[left] num[right] target {right--} else {left}}}return res
}