前言
随机一题
正文
问题来源
本问题来自leetcode上的18题。
问题描述
给定一个未经排序的整数数组,找到最长且连续的的递增序列。
示例 1
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
注意:
答案中不可以包含重复的四元组。
示例 2
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。
满足要求的四元组集合为:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
分析:
func fourSum(nums []int, target int) [][]int {
ret := make([][]int, 0)
sort.Ints(nums)
l := len(nums)
var i,m, j, k int
var temp int
for i = 0; i < l - 3; i++ {
if i > 0 && nums[i] == nums[i-1] {
continue
}
for m = i+1; m < l - 2; m++ {
if m>i+1&&nums[m] == nums[m-1] {
continue
}
j, k = m + 1, l -1
for j < k {
temp = nums[i] + nums[m] + nums[j] + nums[k] - target
if temp > 0 {
k--
} else if temp < 0 {
j++
} else {
tempRet := append([]int{},nums[i],nums[m],nums[j],nums[k])
ret = append(ret, tempRet)
for (k > j) && (nums[k] == nums[k-1]) { //去重
k--
}
for (k > j) && (nums[j] == nums[j+1]) { //去重
j++
}
k--
j++
}
}
}
}
return ret
}
总结:
结语
不要懒,多看多写。