zoukankan      html  css  js  c++  java
  • Leet Code 16.最接近的三数之和

    给定一个包括n个整数的数组nums和一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。

    思路

    可以借鉴上题的循环方式,双指针法。每次判断三个数之和与target的绝对值是否最小,是最小则返回之和,否则继续遍历。如果三数和小于target,就可以将左指针后移,同理,如果三数和大于target,就可以将右指针前移。

    提交代码

    import java.util.*;
    import static java.lang.Math.min;
    
    public class leetcode {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            int n = scan.nextInt();
            String str = scan.nextLine();
            int[] nums = new int[n];
            for(int i = 0; i < n; i++) {
                nums[i] = scan.nextInt();
            }
            int target = scan.nextInt();
            int result= threeSumClosest(nums, target);
            System.out.println(result);
        }
    
        public static int threeSumClosest(int[] nums, int target) {
            int len = nums.length;
            Arrays.sort(nums);
            int ans = nums[0]+nums[1]+nums[2];
            for(int i = 0; i<len; i++) {
                int L = i+1;
                int R = len-1;
                while (L < R) {
                    int sum = nums[i] + nums[L] + nums[R];
                    if(Math.abs(ans-target) > Math.abs(sum-target)) {
                        ans = sum;
                    }
                    int diff = sum - target;
                    if(diff == 0) {
                        return target;
                    }
                    else if (diff < 0) {
                        L++;
                    }
                    else if (diff > 0) {
                        R--;
                    }
                }
            }
            return ans;
        }
    }
    

    小结

    纠结了一会初始值为多少,题目应该是确定nums.length>=3的,所以初始值可以为nums[1]+nums[2]+nums[3]

  • 相关阅读:
    非模式窗体和模式窗体(转
    一次性帮你解决毕业论文的所有排版问题
    c# Wndproc的使用方法
    ref和out 转
    c# 基本语法(转)
    U盘装/虚拟光驱 装双系统
    U盘启动盘 装系统
    Hibernate查询条件封装对象Expression介绍 Hi
    asp.net实现 gridview 鼠标单击任意字段选中一行 ,并获取数据 Hi
    C#如何取出非公共成员 Hi
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12625095.html
Copyright © 2011-2022 走看看