【leetcode】Array——3Sum Closest(16)
来源:互联网 发布:网络教学系统uml 编辑:程序博客网 时间:2024/05/21 20:16
题目:
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).
思路:暴力遍历,找差值最小的返回。时间复杂度是O(n^3)
代码:略
优化:遍历第一个数,后面两个数用two pointers从两端往中间遍历,时间复杂度O(n^2)
代码:
public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int minDif=Integer.MAX_VALUE;int res=0;for(int i=0;i<nums.length;i++){int start = i+1;int end = nums.length-1;while(start<end){int sum = nums[i]+nums[start]+nums[end];if(sum==target)return target;else if(sum<target){start++;}else{end--;}if(Math.abs(sum-target)<Math.abs(minDif)){minDif=sum-target;res=sum;}}}return res;}或者如下(下面方法在leetcode runtime比上面短很多,虽然算法原理一样,并不知道为啥~~~)
public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int minDif=Integer.MAX_VALUE;for(int i=0;i<nums.length-2;i++){int curDif=Two(nums,nums[i],i+1,target-nums[i]);if(curDif==0)return target;if(Math.abs(curDif)<Math.abs(minDif)){minDif=curDif;}}return target+minDif;}private int Two(int []nums,int z,int start,int target){int minDif=Integer.MAX_VALUE;int end = nums.length-1;while(start<end){int sum = nums[start]+nums[end];if(sum==target)return 0;else if(sum>target){end--;}else{start++;}if(Math.abs(sum-target)<Math.abs(minDif))minDif=sum-target;}return minDif;}
0 0
- 【leetcode】Array——3Sum Closest(16)
- LeetCode[Array]----3Sum Closest
- 16. 3Sum Closest leetcode(array)
- leetcode.array--16. 3Sum Closest
- 【LeetCode】LeetCode——第16题:3Sum Closest
- leetcode - 3Sum Closest (kSum Closest)
- 3Sum Closest (leetcode 16)
- LeetCode(16)3Sum Closest
- LeetCode (16)3Sum Closest
- LeetCode——3Sum Closest
- LeetCode——3Sum Closest
- leetcode 016 —— 3Sum Closest
- LeetCode题解——3Sum Closest
- LeetCode——16. 3Sum Closest
- Leetcode——16. 3Sum Closest
- [Array]3Sum Closest
- leetcode——16——3Sum Closest
- leetcode第16题——**3Sum Closest
- ImageLoader使用详解 精简版
- Java Executors(线程池)
- isKindOfClass和 isMemberOfClass
- spring学习:与jms的集成
- C#知识点总结
- 【leetcode】Array——3Sum Closest(16)
- delphi 解决屏幕闪烁
- new与malloc
- 聚类算法之邻居生长器
- 让Hibernate输出SQL语句以便更加深入调试程序----参数配置
- 项目中常用的工具一
- ASCII编码与Unicode编码
- EnumProcess
- Eclipse c/c++开发环境搭建