zoukankan      html  css  js  c++  java
  • 16. 3Sum Closest

    一、题目

      1、审题

        

      2、分析:

        给出一个数字数组,求其中三个元素的和让其最接近 target。

    二、解答

      1、分析:

        a、将数组 nums 排序,遍历数组中元素;

        b、遍历下标为 i 的元素时,取 low 指针指向下标为 i + 1 的元素, high 指向数组最后一个元素下标;

        c、循环判断 当 low < high 时,令 sum = nums[i] + nums[low] + nums[high] ,比较 sum 是否最接近 target;    

          若  sum = target , 则返回 target;  

          若 sum > target, 则 high--;

          否则, low--;

    class Solution {
        public int threeSumClosest(int[] nums, int target) {
    
            if(nums.length == 0)
                return 0;
    
            Arrays.sort(nums);
            int result = nums[0] + nums[1] + nums[2];
            for (int i = 0; i < nums.length - 2; i++) {
    
                // if(nums[i] > target)
                //     break;
    
                int low = i + 1, high = nums.length - 1;
                if((i > 0 && nums[i] != nums[i-1]) || i == 0) {
    
                    while(low < high) {
                        int sum = nums[i] + nums[low] + nums[high];
                        if (sum - target == 0)
                            return target;
    
                        if(Math.abs(sum - target) < Math.abs(result - target))
                            result = sum;
    
                        if (sum - target < 0)
                            low++;
                        else
                            high--;
                    }
                }
    
            }
    
            return result;
        }
    }
  • 相关阅读:
    docker映射端口无法访问
    Tomcat日志分析
    linux服务器性能测试
    mysql库表结构对比工具
    网络基础知识,不懂看这里
    Python之redis、mysql进程守护
    linux文件查找工具
    nginx解决跨域问题
    redis插入单个较大的键值
    linux系统安全巡检脚本
  • 原文地址:https://www.cnblogs.com/skillking/p/9409794.html
Copyright © 2011-2022 走看看