ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

16. 最接近的三数之和

2019-05-25 16:43:46  阅读:207  来源: 互联网

标签:right target temp nums int 三数 16 接近 left


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

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
 1 public class ThreeSumClosest {
 2     //方法:双指针法,需要先对数组进行排序,固定一个值,其余两指从两端逐步向中间查询
 3     public static int threeSumClosest(int[] nums, int target) {
 4         int minDifference = Integer.MAX_VALUE;
 5         int len = nums.length;
 6         int res = 0;
 7         quickSort(nums, 0, len-1);  //先对数组进行排序,练习一下快排
 8         for(int i=0; i<len-2; i++) {  //数组中后两个数无需计算
 9             int value = target - nums[i];  //三数中后两个数的目标和
10             int left = i+1;
11             int right = len-1;
12             while(left < right) {
13                 int temp = nums[left] + nums[right];
14                 if(value == temp) {  //如果两数的值等于目标和,则肯定是最接近的,直接返回
15                     return target;
16                 }
17                 int chazhi = value - temp > 0 ? value -temp : temp - value;  //计算得到差值的绝对值。因为是最接近的,可能大于也可能小于
18                 if(chazhi < minDifference) {  //比较当前差值和记录最小差值的大小,小于则使用当前差值
19                     minDifference = chazhi;
20                     res = nums[i] + temp;
21                 }
22                 if(value < temp) {
23                     right--;
24                 }else {
25                     left++;
26                 }
27             }
28         }
29         return res;
30     }
31     public static void quickSort(int[] nums, int start, int end) {
32         if(start >= end) {
33             return;
34         }
35         int left = start;
36         int right = end;
37         int temp = nums[left];
38         while(left < right) {
39             while(left < right && nums[right] >= temp) {
40                 right--;
41             }
42             nums[left] = nums[right];
43             while(left < right && nums[left] <= temp) {
44                 left++;
45             }
46             nums[right] = nums[left];
47         }
48         nums[left] = temp;
49         quickSort(nums, start, left-1);
50         quickSort(nums, left+1, end);
51     }
52 }

 

标签:right,target,temp,nums,int,三数,16,接近,left
来源: https://www.cnblogs.com/xiyangchen/p/10922847.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有