zoukankan      html  css  js  c++  java
  • [leetcode]16-最接近的三数之和

    1. 题目描述

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

    Input: nums = [-1,2,1,-4], 和 target = 1.

    Output: 最接近的三数之和是2

    2.思路

    1.双指针法
    先对目标数组进行排序,假设最开始第一个,第二个,最后一个元素之和sum最接近目标值target。如果sum=target,直接返回sum(很明显,这一定是最接近的);如果sum>target,则最后一个元素要向前推;
    如果sum<target,则第二个元素要向后推。逐渐更新sum,直到循环结束。(表诉得不是很清楚,直接看代码把。)


    3.题解

    双指针法

    class Solution {
        public int threeSumClosest(int[] nums, int target) {
            Arrays.sort(nums);
            int left=1;
            int right=nums.length-1;
            int result=nums[0]+nums[left]+nums[right];
            int newresult=0;
            if(nums.length==3){
                return nums[0]+nums[1]+nums[2];
            }
            for(int i=0;i<nums.length-2;i++){
                left=i+1;
                right=nums.length-1;
                while(left<right){
                    newresult=nums[i]+nums[left]+nums[right];
                    if(Math.abs(newresult-target)<=Math.abs(result-target)){
                        result=newresult;
                    }
                    if(result==target){
                        return result;
                    }
                    else if(newresult<target){
                        left++;
                    }
                    else{
                        right--;
                    }
                }
            }
            return result;
        }
    }
    
    
    花五年时间成为某个领域的专家
  • 相关阅读:
    反射和内置方法重写
    封装
    接口与抽象类 、多态
    面向对象--继承和组合
    python对象
    模块导入
    python序列化模块
    time random sys os 模块
    python re模块和collections
    python各种推导式
  • 原文地址:https://www.cnblogs.com/sang-bit/p/11716792.html
Copyright © 2011-2022 走看看