zoukankan      html  css  js  c++  java
  • LintCode-三数之和 II

    题目描述:

      给一个包含n个整数的数组S, 找到和与给定整数target最接近的三元组,返回这三个数的和。

     注意事项

      只需要返回三元组之和,无需返回三元组本身

    样例

      例如S = [-1, 2, 1, -4] and target = 1.  和最接近1的三元组是 -1 + 2 + 1 = 2.

     1 public class Solution {
     2     /**
     3      * @param numbers: Give an array numbers of n integer
     4      * @param target : An integer
     5      * @return : return the sum of the three integers, the sum closest target.
     6      */
     7     public int threeSumClosest(int[] numbers ,int target) {
     8      // 记录最小的差值
     9         long minDiff = Long.MAX_VALUE;
    10         // 记录最小差值对应的三个整数和
    11         long result = 0;
    12         // 每次求得的差值
    13         long diff;
    14         // 每次求得的三个整数的和
    15         long sum;
    16 
    17         // 先对数组进行排序
    18         Arrays.sort(numbers);
    19 
    20 
    21         // i表示假设取第i个数作为结果
    22         for (int i = 0; i < numbers.length - 2; i++) {
    23             // 第二个数可能的起始位置
    24             int j = i + 1;
    25             // 第三个数可能是结束位置
    26             int k = numbers.length - 1;
    27 
    28             while (j < k) {
    29                 // 求当前三个数的和
    30                 sum = numbers[j] + numbers[k] + numbers[i];
    31                 // 当前和与目标和之间的差值
    32                 diff = Math.abs(target - sum);
    33 
    34                 // 差值为0就直接返回
    35                 if (diff == 0) {
    36                     return (int) sum;
    37                 }
    38 
    39                 // 如果当前的差值比之前记录的差值小
    40                 if (diff < minDiff) {
    41                     // 更新最小的差值
    42                     minDiff = diff;
    43                     // 更新最小差值对应的和
    44                     result = sum;
    45 
    46                     // 以上的设置在下一次元素处理时生效
    47                 }
    48 
    49 
    50                 // 和大于target
    51                 if (sum > target) {
    52                     k--;
    53                 }
    54                 // 和小于target
    55                 else {
    56                     j++;
    57                 }
    58             }
    59         }
    60 
    61         return (int) result;
    62     }
    63 }
  • 相关阅读:
    排序算法
    顺序表与链表
    二叉树
    查找算法
    15 Django 离线脚本
    poj 1330 Nearest Common Ancestors(LCA 基于二分搜索+st&rmq的LCA)
    hdu 6158 The Designer( 反演圆)
    圆的反演性质
    HDU 6153 A Secret(扩展kmp)
    kmp&扩展kmp
  • 原文地址:https://www.cnblogs.com/xiaocainiao2hao/p/5364685.html
Copyright © 2011-2022 走看看