博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 日记 3sumclosest java
阅读量:5256 次
发布时间:2019-06-14

本文共 2824 字,大约阅读时间需要 9 分钟。

思路一为遍历:

public int thirdSolution(int[] nums, int target) {        int result = nums[0] + nums[1] + nums[2];        Arrays.sort(nums);        for (int i = 0; i < nums.length - 2; i++) {            int start = i + 1, end = nums.length - 1;            while (start < end) {                int tmp = nums[i] + nums[start] + nums[end];                if (tmp < target) {                    start++;                }                if (tmp > target) {                    end--;                }                if (tmp == target) {                    return tmp;                }                if (Math.abs(tmp - target) < Math.abs(result - target)) {                    result = tmp;                }            }        }        return result;    }

 

整体思路二为将threeSum将为twoSum即可

public int solution(int[] nums, int target) {        if (nums.length == 3) {            return nums[0] + nums[1] + nums[2];        } else {            Arrays.sort(nums);            int r = 10000;//此两处10000为省事而设,如果严谨应该大致找到其中的一个较大距离            int distance = 10000;            for (int i = 0; i < nums.length; i++) {                int[] temarray = new int[nums.length - 1];                System.arraycopy(nums, 0, temarray, 0, i);                System.arraycopy(nums, i + 1, temarray, i, nums.length - i - 1);                int tem = twoSumClosest(temarray, target - nums[i]) + nums[i];                int temdistance = tem - target;                if (temdistance < 0) {                    temdistance = -temdistance;                } else if (temdistance == 0) {                    return tem;                }                if (temdistance < distance) {                    r = tem;                    distance = temdistance;                }            }            return r;        }    }    private int twoSumClosest(int[] nums, int target) {        int l = 0, r = nums.length - 1;        int min = nums[r] + nums[l];        int distance;        if (min - target > 0) {            distance = min - target;        } else {            distance = target - min;        }        while (l < r) {            if (nums[l] + nums[r] == target)                return nums[l] + nums[r];            if (nums[l] + nums[r] < target) {                if (target - (nums[l] + nums[r]) < distance) {                    min = nums[l] + nums[r];                    distance = target - (nums[l] + nums[r]);                }                l++;                continue;            }            if (nums[l] + nums[r] > target) {                if ((nums[l] + nums[r]) - target < distance) {                    min = nums[l] + nums[r];                    distance = (nums[l] + nums[r]) - target;                }                r--;                continue;            }        }        return min;    }

本质上讲两种思路没有区别

转载于:https://www.cnblogs.com/aksdenjoy/p/5689190.html

你可能感兴趣的文章
P1192-台阶问题
查看>>
一、使用pip安装Python包
查看>>
3.PHP 教程_PHP 语法
查看>>
Duilib扩展《01》— 双击、右键消息扩展
查看>>
利用Fiddler拦截接口请求并篡改数据
查看>>
python习题:unittest参数化-数据从文件或excel中读取
查看>>
在工程中要加入新的错误弹出方法
查看>>
PS 滤镜— — sparkle 效果
查看>>
网站产品设计
查看>>
代理ARP
查看>>
go 学习笔记(4) ---项目结构
查看>>
java中静态代码块的用法 static用法详解
查看>>
Java线程面试题
查看>>
Paper Reading: Relation Networks for Object Detection
查看>>
day22 01 初识面向对象----简单的人狗大战小游戏
查看>>
mybatis源代码分析:深入了解mybatis延迟加载机制
查看>>
Flask三剑客
查看>>
Hibernate-缓存
查看>>
【BZOJ4516】生成魔咒(后缀自动机)
查看>>
提高PHP性能的10条建议
查看>>