首页 > 试题广场 >

四数之和

[编程题]四数之和
  • 热度指数:1246 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度是 n 的数组 nums ,和一个目标值 target,请你找出不重复的四元组 [nums[a],nums[b],nums[c],nums[d]] (如果四元组的元素一一对应则只输出其中一组)
同时四元组要满足 各不相同,
你可以按任意顺序输出

数据范围:
示例1

输入

[2,0,-2,3,-3,0],0

输出

[[2,-2,0,0],[3,-3,0,0],[2,-2,3,-3]]
package main
import "sort"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @param target int整型 
 * @return int整型二维数组
*/
func fournumber( nums []int ,  target int ) [][]int {
    ans:=[][]int{}
    sort.Ints(nums)
    for i:=0;i<len(nums);i++{
        if i>0&&nums[i]==nums[i-1]{
            continue
        }
        for j:=i+1;j<len(nums);j++{
            if j>i+1&&nums[j]==nums[j-1]{
                continue
            }
            l,r:=j+1,len(nums)-1
            for l<r{
                sum:=nums[i]+nums[j]+nums[l]+nums[r]
                if sum==target{
                    ans=append(ans,[]int{nums[i],nums[j],nums[l],nums[r]})
                    for l<r&&nums[l]==nums[l+1]{
                        l++
                    }
                    for l<r&&nums[r]==nums[r-1]{
                        r--
                    }
                    l++
                    r--
                }else if sum>target{
                    r--
                }else{
                    l++
                }
            }
        }
    }
    return ans
}

发表于 2023-03-29 10:36:42 回复(0)