• LeetCode:16. 3Sum Closest(Medium)


    1. 原题链接

    https://leetcode.com/problems/3sum-closest/description/

    2. 题目要求

    数组S = nums[n]包含n个整数,找出S中三个整数a,b,c,使得a+b+c=sum,sum最接近给定的目标整数target,返回sum。

    3. 解题思路

    采用与第15题相同的思路(第15题链接),不过要引入两个整型变量min和result。

    min用来保存当前sum和target的最小差值

    result用来保存最小差值时的sum,最终的result也就是我们需要返回的结果。

    当sum和target一致时,直接返回sum。

    4. 代码实现

    import java.util.Arrays;
    
    public class ThreeSumClosest {
        public static void main(String[] args) {
            int[] nums = {-1, 2, 1, 4};
            System.out.println(ThreeSumClosest.threeSumClosest(nums, 1));
        }
        
        public static int threeSumClosest(int[] nums, int target) {
           // 先进行排序
            Arrays.sort(nums);
            int sum = 0, result = 0, min = Integer.MAX_VALUE;  // min为target和sum之间的差值
            for (int i = 0; i < nums.length - 2; i++) {
                int l = i + 1, r = nums.length - 1;
                if (i == 0 || (i > 0 && nums[i] != nums[i - 1])) {
                    while (l < r) {
                        sum = 0;  // 将sum清零
                        sum = nums[i] + nums[l] + nums[r];
                        if (target - sum == 0) {  // 如果直接与目标值相等,直接返回
                            return sum;
                        } else if (target - sum > 0) {
                            if ((target - sum) < min) {
                                min = target - sum;
                                result = sum;
                            }
                            while (l < r && nums[l] == nums[l + 1]) l++;  // 跳过重复的值
                            l++;
                        } else {
                            if ((sum - target) < min) {
                                min = sum - target;
                                result = sum;
                            }
                            while (l < r && nums[r] == nums[r - 1]) r--;  // 跳过重复的值
                            r--;
                        }
                    }
                }
    
            }
    
            return result;
        }
    }
    

      

  • 相关阅读:
    NSUserDefaults存储自定义类
    beginBackgroundTaskWithExpirationHandle
    instancetype
    #define const extern
    singleton
    报错:说改变了系统文件。解决方法
    不合法语句 self.contentView.frame.origin.x = x;
    google应用商店的解决
    笔记
    读流testDemo
  • 原文地址:https://www.cnblogs.com/huiAlex/p/8079591.html
Copyright © 2020-2023  润新知