zoukankan      html  css  js  c++  java
  • lintcode: 三数之和II

    题目

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

    样例

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

    注意

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

    解题

    和上一题差不多,程序也只是稍微修改了

    public class Solution {
        /**
         * @param numbers: Give an array numbers of n integer
         * @param target : An integer
         * @return : return the sum of the three integers, the sum closest target.
         */
        public int threeSumClosest(int[] numbers ,int target) {
            // write your code here
            if(numbers == null)
                return 0;
            Arrays.sort(numbers);
            int sum = Integer.MAX_VALUE ;
            int numlen = numbers.length;
            for( int i = 0;i< numlen ;i++){
                int left = i + 1;
                int right = numlen - 1;
                while(left < right){
                    int tmpsum = numbers[i] + numbers[left] + numbers[right];
                    int tmpdist = tmpsum - target;
                    sum = Math.abs(tmpdist) > Math.abs(sum - target) ? sum:tmpsum;
                    if(tmpdist == 0){
                        return target;
                    }
                    if(tmpdist <0){
                        left++;
                    }else{
                        right--;
                    }
    
                }
            }
            return sum;
        }
    }
    Java Code

    总耗时: 1504 ms

    class Solution:
        """
        @param numbers: Give an array numbers of n integer
        @param target : An integer
        @return : return the sum of the three integers, the sum closest target.
        """
        def threeSumClosest(self, numbers, target):
            # write your code here
            if numbers == None:
                return 0 
            numlen = len(numbers)
            numbers.sort()
            sum = 0
            for i in range(numlen-1):
                left = i + 1
                right = numlen - 1
                while left < right:
                    tmpsum = numbers[i] + numbers[left] + numbers[right]
                    tmpdist = tmpsum - target
                    if i==0:
                        sum = tmpsum
                    sum = sum if abs(tmpdist) > abs(sum-target) else tmpsum 
                    if tmpdist == 0:
                        return target
                    if tmpdist < 0:
                        left +=1
                    else:
                        right -=1
            return sum
    Python Code

    总耗时: 403 ms

  • 相关阅读:
    c#向某网址Post信息,并得到Cookies
    调度自动化系统及调度数据网安全分析探讨
    C#winform中怎么将程序最小化到系统托盘
    电力配网自动化解决方案
    .NET (c#) 模拟 Cookie
    调整数组顺序使奇数位于偶数前面
    在字符串中删除特定的字符
    在O(1)时间内删除链表结点
    单链表逆置
    从尾到头输出链表
  • 原文地址:https://www.cnblogs.com/bbbblog/p/4912601.html
Copyright © 2011-2022 走看看