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);//恢复现场
    }
}
相关推荐
(Charon)14 分钟前
【C++】定时器进阶:使用最小堆管理定时任务
c++·算法
hansang_IR26 分钟前
【题解】 [省选联考 2021 A/B 卷] 卡牌游戏
c++·算法
这个DBA有点耶1 小时前
COUNT慢不是因为用了*,是这5个原因——1000万行数据实测+执行计划深度解析
数据库·mysql·算法
贾伟康1 小时前
【口算王|01】HarmonyOS ArkTS 口算题生成实战:按年级、运算类型和难度生成可控题目
算法·harmonyos·arkts·随机生成·口算题
lzx_0021 小时前
C++11(一)
开发语言·c++·算法
529宝宝起名网1 小时前
用 Python 实现名字寓意评分算法:基于 NLP 语义分析的名字内涵深度评估
python·算法·自然语言处理
带多刺的玫瑰2 小时前
Leecode#26刷题之删除有序数组中的重复项
数据结构·算法·leetcode
en.en..3 小时前
C语言核心解析:#define与typedef本质区别
开发语言·c++·算法
wabs6665 小时前
关于二叉树【429.N叉树的层序遍历的思考】
数据结构·c++·算法·leetcode·二叉树
hetao17338375 小时前
2026-09-08 hetao1733837 的刷题记录
c++·算法