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;
        }
    }
    

      

  • 相关阅读:
    Lightmaping
    Android内存回收机制
    基本光照模型简单实现
    Pass的通用指令开关
    使用Depth Texture
    使用替换shader渲染
    Windows下安装Oracle12C(一)
    SpringMVC文件上传基础
    Spring集成线程池
    《经久不衰的Spring框架:@ResponseBody 中文乱码》(转)
  • 原文地址:https://www.cnblogs.com/guozhiguoli/p/3401246.html
Copyright © 2011-2022 走看看