2024春招冲刺题单 ONT68 最接近的三数之和【中等 数组,递归 Java,Go,PHP】

题目

题目链接:

https://www.nowcoder.com/practice/f889497fd1134af5af9de60b4d13af23

相同题目:

https://www.lintcode.com/problem/59

思路

复制代码
	本题答案是n数之和相关问题的模板。

参考答案Java

java 复制代码
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @param target int整型
     * @return int整型
     */
    public int ClosestSum (int[] nums, int target) {
        int[] help = {0, -1}; //-1表示help还没有赋值
        dfs(nums, 0, new ArrayList<>(), 0, target, help);
        return help[0];
    }

    //N数之和的递归模版
    public void dfs(int[] nums, int index, List<Integer> path, int sum, int target,
                    int[] help) {
        if (path.size() == 3) {
            int diff = Math.abs(sum - target);
            if (help[1] == -1) {
                help[0] = sum;
                help[1] = diff;
            } else if (help[1] > diff) {
                help[0] = sum;
                help[1] = diff;
            }
            return;
        }

        for (int i = index; i < nums.length ; i++) {
            path.add(nums[i]);
            dfs(nums, i + 1, path, sum + nums[i], target, help);
            path.remove(path.size() - 1); //恢复现场
        }
    }
}

参考答案Go

go 复制代码
package main



/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums int整型一维数组
 * @param target int整型
 * @return int整型
 */
func ClosestSum(nums []int, target int) int {
	help := []int{0, -1} //-1 表示还没有赋值
	path := []int{}
	dfs(nums, 0, path, 0, target, &help)
	return help[0]
}

//n数之和的递归模版
func dfs(nums []int, index int, path []int, sum int, target int, help *[]int) {
	if len(path) == 3 {
		diff := sum - target
		if diff < 0 {
			diff = diff * -1 //绝对值
		}

		if (*help)[1] == -1 {
			(*help)[0] = sum
			(*help)[1] = diff
		} else if (*help)[1] > diff {
			(*help)[0] = sum
			(*help)[1] = diff
		}

		return
	}

	for i := index; i < len(nums); i++ {
		path = append(path, nums[i])
		dfs(nums, i+1, path, sum+nums[i], target, help)

		path = path[:len(path)-1] //恢复现场
	}
}

参考答案PHP

php 复制代码
<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @param target int整型 
 * @return int整型
 */
function ClosestSum( $nums ,  $target )
{
   $help = [0,-1]; //-1表示还没有赋值
    dfs($nums,0,array(),0,$target,$help);
    return $help[0];
}


//n数之和的递归模板
function dfs($nums,$index,$path,$sum,$target,&$help){
    if(count($path) ==3) {
        $diff = $sum-$target;
        if($diff <0)
            $diff =$diff*-1;

        if($help[1] ==-1){
            $help[0] =$sum;
            $help[1] = $diff;
        }else if($help[1] > $diff){
            $help[0] =$sum;
            $help[1] = $diff;
        }
        return;
    }

    for($i=$index;$i<count($nums);$i++){
        array_push($path,$nums[$i]);
        dfs($nums,$i+1,$path,$sum+$nums[$i],$target,$help);
        array_pop($path);//恢复现场
    }
}
相关推荐
冻柠檬飞冰走茶4 小时前
PTA基础编程题目集 7-27 冒泡法排序(C语言实现)
c语言·开发语言·数据结构·算法
大鱼>6 小时前
因子挖掘+回测+RL交易:量化金融完整系统
人工智能·深度学习·算法·金融
c238567 小时前
《枚举算法 “翻译官”:用 enum class 给 “游游的礼盒” 算分》
c语言·c++·算法
吃好睡好便好8 小时前
MATLAB中图像的对数变换
图像处理·学习·算法·计算机视觉·matlab
noipp8 小时前
推荐题目:洛谷 P5843 [SCOI2012] Blinker 的噩梦
c语言·数据结构·c++·算法·游戏·洛谷·luogu
极客BIM工作室8 小时前
OpenCascade 倒角(Chamfer)算法完整逻辑解析
算法
冻柠檬飞冰走茶8 小时前
PTA基础编程题目集 7-20 打印九九口诀表(C语言实现)
c语言·开发语言·数据结构·算法
鱼子星_8 小时前
《算 · 法》题目解析篇(1):最近公共祖先问题,线段树,最长回文子序列
c++·算法·动态规划·递归
雾喔8 小时前
算法练习5
算法·代理模式
问商十三载8 小时前
RAG 检索召回越多越好?2026 信噪比模型深度解析
人工智能·算法·机器学习