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]

  • 相关阅读:
    BZOJ 3506 机械排序臂 splay
    BZOJ 2843 LCT
    BZOJ 3669 魔法森林
    BZOJ 2049 LCT
    BZOJ 3223 文艺平衡树 splay
    BZOJ 1433 假期的宿舍 二分图匹配
    BZOJ 1051 受欢迎的牛 强连通块
    BZOJ 1503 郁闷的出纳员 treap
    BZOJ 1096 ZJOI2007 仓库设计 斜率优化dp
    BZOJ 1396: 识别子串( 后缀数组 + 线段树 )
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12625095.html
Copyright © 2011-2022 走看看