博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode] 16. 最接近的三数之和
阅读量:5076 次
发布时间:2019-06-12

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

跟之前几个题思路大致相同,

贪心中的双指针法

class Solution {    public int threeSumClosest(int[] nums, int target) {        Arrays.sort(nums);        int min = Integer.MAX_VALUE;        int ans = 0;        int flag = 0;        for (int base = 0; base < nums.length; base++) {            int i = base + 1, j = nums.length - 1;            if (flag == 1) break;            while (i < j) {                int tmp = nums[base] + nums[i] + nums[j];                if (Math.abs(tmp - target) < min) {                    ans = tmp;                    min = Math.abs(tmp - target);                }                if (tmp > target) {                    j--;                } else if (tmp < target) {                    i++;                } else {                    flag = 1;                    break;                }            }        }        return ans;    }}

更新:

观摩了下榜单第一老哥的代码,写的不错,比我的快了许多:

class Solution {    public int threeSumClosest(int[] nums, int target) {        int n = nums.length;        Arrays.sort(nums);        int less = nums[0] + nums[1] + nums[2];        int more = nums[n-3] + nums[n-2] + nums[n-1];        if (less >= target)            return less;        if (more <= target)            return more;        for (int i = 0; i < n - 2; i++){            int min = nums[i] + nums[i+1] + nums[i+2];            int max = nums[i] + nums[n-2] + nums[n-1];            if (min > target){                more = Math.min(more, min);                break;            }            if (max < target){                less = Math.max(less, max);                continue;            }            int j = i + 1, k = n - 1;            while(j < k){                int sum = nums[i] + nums[j] + nums[k];                if(sum == target) return target;                else if(sum > target){                    more = Math.min(more, sum);                    while(--k > j && nums[k]==nums[k+1]);                }else{                    less = Math.max(less, sum);                    while(++j < k && nums[j]==nums[j-1]);                }            }        }        return more - target > target - less ? less : more;    }}

转载于:https://www.cnblogs.com/acbingo/p/9250343.html

你可能感兴趣的文章
http://lorempixel.com/ 可以快速产生假图
查看>>
编写一个函数isMerge,判断一个字符串str是否可以由其他两个字符串part1和part2“组合”而成...
查看>>
NYOJ-613//HDU-1176-免费馅饼,数字三角形的兄弟~~
查看>>
graphite custom functions
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
oracle连接的三个配置文件(转)
查看>>
Python内置函数(29)——help
查看>>
Android TextView加上阴影效果
查看>>
《梦断代码》读书笔记(三)
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
AngularJS学习篇(一)
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
spring security 11种过滤器介绍
查看>>
代码实现导航栏分割线
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
luogu4849 寻找宝藏 (cdq分治+dp)
查看>>
关于源程序到可运行程序的过程
查看>>
C# Async与Await的使用
查看>>
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>