File tree Expand file tree Collapse file tree 3 files changed +95
-0
lines changed
Filter options
src/com/blankj/medium/_016 Expand file tree Collapse file tree 3 files changed +95
-0
lines changed
Original file line number Diff line number Diff line change 75
75
| 11 | [ Container With Most Water] [ 011 ] | Array, Two Pointers |
76
76
| 12 | [ Integer to Roman] [ 012 ] | Math, String |
77
77
| 15 | [ 3Sum] [ 015 ] | Array, Two Pointers |
78
+ | 15 | [ 3Sum Closest] [ 016 ] | Array, Two Pointers |
78
79
| 17 | [ Letter Combinations of a Phone Number] [ 017 ] | String, Backtracking |
79
80
| 19 | [ Remove Nth Node From End of List] [ 019 ] | Linked List, Two Pointers |
80
81
| 33 | [ Search in Rotated Sorted Array] [ 033 ] | Arrays, Binary Search |
146
147
[ 011 ] : https://github.com/Blankj/awesome-java-leetcode/blob/master/note/011/README.md
147
148
[ 012 ] : https://github.com/Blankj/awesome-java-leetcode/blob/master/note/012/README.md
148
149
[ 015 ] : https://github.com/Blankj/awesome-java-leetcode/blob/master/note/015/README.md
150
+ [ 016 ] : https://github.com/Blankj/awesome-java-leetcode/blob/master/note/016/README.md
149
151
[ 017 ] : https://github.com/Blankj/awesome-java-leetcode/blob/master/note/017/README.md
150
152
[ 019 ] : https://github.com/Blankj/awesome-java-leetcode/blob/master/note/019/README.md
151
153
[ 033 ] : https://github.com/Blankj/awesome-java-leetcode/blob/master/note/033/README.md
Original file line number Diff line number Diff line change
1
+ # [ 3Sum Closest] [ title ]
2
+
3
+ ## Description
4
+
5
+ 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.
6
+
7
+ ```
8
+ For example, given array S = {-1 2 1 -4}, and target = 1.
9
+
10
+ The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
11
+ ```
12
+
13
+ ** Tags:** Array, Two Pointers
14
+
15
+
16
+ ## 思路
17
+
18
+ 这道题和 [ 3Sum] [ 015 ] 的思路基本一样,先对数组进行排序,然后遍历这个排序数组,用两个指针分别指向当前元素的下一个和数组尾部,判断三者的和与 ` target ` 的差值来移动两个指针,并更新其结果,当然,如果三者的和直接与 ` target ` 值相同,那么返回 ` target ` 结果即可。
19
+
20
+ ``` java
21
+ public class Solution {
22
+ public int threeSumClosest (int [] nums , int target ) {
23
+ int delta = 0x7fffffff , res = 0 ;
24
+ Arrays . sort(nums);
25
+ int len = nums. length - 2 ;
26
+ for (int i = 0 ; i < len; i++ ) {
27
+ int st = i + 1 , end = nums. length - 1 ;
28
+ while (st < end) {
29
+ int sum = nums[i] + nums[st] + nums[end];
30
+ int curDelta = Math . abs(sum - target);
31
+ if (curDelta == 0 ) return sum;
32
+ if (curDelta < delta) {
33
+ delta = curDelta;
34
+ res = sum;
35
+ }
36
+ if (sum > target) -- end;
37
+ else ++ st;
38
+ }
39
+ }
40
+ return res;
41
+ }
42
+ }
43
+ ```
44
+
45
+
46
+ ## 结语
47
+
48
+ 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[ awesome-java-leetcode] [ ajl ]
49
+
50
+
51
+
52
+ [ 015 ] : https://github.com/Blankj/awesome-java-leetcode/blob/master/note/015/README.md
53
+ [ title ] : https://leetcode.com/problems/3sum-closest
54
+ [ ajl ] : https://github.com/Blankj/awesome-java-leetcode
Original file line number Diff line number Diff line change
1
+ package com .blankj .medium ._016 ;
2
+
3
+ import java .util .Arrays ;
4
+
5
+ /**
6
+ * <pre>
7
+ * author: Blankj
8
+ * blog : http://blankj.com
9
+ * time : 2018/01/25
10
+ * desc :
11
+ * </pre>
12
+ */
13
+ public class Solution {
14
+ public int threeSumClosest (int [] nums , int target ) {
15
+ int delta = 0x7fffffff , res = 0 ;
16
+ Arrays .sort (nums );
17
+ int len = nums .length - 2 ;
18
+ for (int i = 0 ; i < len ; i ++) {
19
+ int st = i + 1 , end = nums .length - 1 ;
20
+ while (st < end ) {
21
+ int sum = nums [i ] + nums [st ] + nums [end ];
22
+ int curDelta = Math .abs (sum - target );
23
+ if (curDelta == 0 ) return sum ;
24
+ if (curDelta < delta ) {
25
+ delta = curDelta ;
26
+ res = sum ;
27
+ }
28
+ if (sum > target ) --end ;
29
+ else ++st ;
30
+ }
31
+ }
32
+ return res ;
33
+ }
34
+
35
+ public static void main (String [] args ) {
36
+ Solution solution = new Solution ();
37
+ System .out .println (solution .threeSumClosest (new int []{-1 , 2 , 1 , -4 }, 1 ));
38
+ }
39
+ }
You can’t perform that action at this time.
0 commit comments