zoukankan      html  css  js  c++  java
  • 【LeetCode】17. 3 sum closest

    Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

        For example, given array S = {-1 2 1 -4}, and target = 1.
    
        The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

    跟2sum解法类似,先对sum进行排序,循环第一个数,剩下的两个数分别用两个指针分别标记第一个数下一位和最后一个数,根据所得的值sum与target的大小,决定一个指针移动,更新res为与target之差绝对值较小的sum,如果有与target值相等的sum直接返回。 算法复杂度为 排序O(nlogn) + 查找O(n2) = O(n2)
    public class Solution {
        public int threeSumClosest(int[] num, int target) {
            // IMPORTANT: Please reset any member data you declared, as
            // the same Solution instance will be reused for each test case.
            Arrays.sort(num);
            int k=num.length-1;
            int res=0;
            int sum=0;
            boolean flag=true;
            for(int i=0;i<k;i++){
            	int j=i+1;
            	while(j<k){
            		sum=num[i]+num[j]+num[k];
            		if(flag){
            			res=sum;
            			flag=false;
            		}else{
            			if(Math.abs(sum-target)<Math.abs(res-target))
            				res=sum;
            		}
            		if(sum==target){
            			res=sum;
            			return res;
            		}else if(sum<target)
            			j++;
            		else 
            			k--;
            			
            	}
            }
            return res;
        }
    }
    

      

  • 相关阅读:
    python中的system函数与编码
    使用signal、setjmp、longjmp进行Linux/Android C异常处理
    ffffffuzzzzzzzzzzzzing
    EIGRP汇总
    JDK
    世界上最健康的生活方式
    Oracle 取两个表中数据的交集并集差异集合
    信息科技风险管理
    BPDU与PortFast
    大胆发言
  • 原文地址:https://www.cnblogs.com/guozhiguoli/p/3401246.html
Copyright © 2011-2022 走看看