Leetcode-3Sum Closest
来源:互联网 发布:hl系统线切割怎么编程 编辑:程序博客网 时间:2024/06/10 04:17
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).
My Solutio :
import java.lang.reflect.Array;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Collections;import java.util.HashMap;import java.util.List;public class Solution {public List<List<Integer>> threeSum(int[] nums) { HashMap<Integer, Integer> map = new HashMap<>(); List<List<Integer>> ans = new ArrayList<List<Integer>>(); for (int i = 0; i < nums.length; i++) { map.put(nums[i], i); } Arrays.sort(nums); for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nums.length; j++ ) { int complement = - (nums[i] + nums[j]); if (map.containsKey(complement)) { int complementIndex = map.get(complement); if ( complementIndex != i && complementIndex != j) { List<Integer> res = new ArrayList<>(); res.add(nums[i]); res.add(nums[j]); res.add(complement); Collections.sort(res); boolean isExit = false; for (int x = 0; x < ans.size(); x++) { boolean same = true; for (int y = 0; y < ans.get(x).size(); y ++) { if (ans.get(x).get(y) != res.get(y)) { same = false; break; } } if (same) { isExit = true; break; } } if(!isExit) ans.add(res); } } } } return ans; }}
Better Solution :
import java.util.ArrayList;import java.util.Arrays;import java.util.List;import javax.security.auth.kerberos.KerberosKey;public class Solution2 {public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);List<List<Integer>> ans = new ArrayList<List<Integer>>();for (int i = 0; i < nums.length - 2; i++) {if (i > 0 && nums[i] == nums[i - 1]) {continue;}int target = - nums[i];int j = i + 1, k = nums.length - 1;while (j < k) {if (nums[j] + nums[k] == target) {ans.add(Arrays.asList(nums[i], nums[j], nums[k]));j ++;k --;while (j < k && nums[j] == nums[j - 1]) {j ++;} while (j < k && nums[k] == nums[k + 1]) {k --;}} else if (nums[j] + nums[k] > target) {k --;} else {j ++;}}}return ans;}}
阅读全文
0 0
- LeetCode: 3 Sum Closest
- leetcode - 3 sum closest
- leetcode 3Sum Closest
- LeetCode: 3Sum Closest
- [Leetcode]3Sum Closest
- Leetcode: 3SUM Closest
- LeetCode 3Sum Closest
- [Leetcode] 3Sum Closest
- LeetCode : 3Sum Closest
- LeetCode 3Sum Closest
- [LeetCode] 3Sum Closest
- 【leetcode】3Sum Closest
- [LeetCode]3Sum Closest
- LeetCode-3Sum Closest
- LeetCode:3Sum Closest
- LeetCode | 3Sum Closest
- 【leetcode】3Sum Closest
- Leetcode: 3Sum Closest
- 4.3_控制流3break_continue__pass.docx
- 设计模式深入浅出(一)对象创建——工厂方法,抽象工厂
- Minimum Path Sum
- 5.1 输入输出方式介绍(Output Format).docx
- PyCharm使用技巧:Parse from History(从复制历史中选择需要的内容)
- Leetcode-3Sum Closest
- 6.1_错误与异常处理Error__Exceptions
- 数据链路层的功能与设备
- Python自动化运维笔记(四):使用difflib模块实现文件内容差异对比
- 清北学堂-D1-T3-roadwork
- week4-leetcode #6-ZigZag Conversion[Medium]
- tomcat部署
- Python使用网易邮箱发邮件
- Java数据结构详解(八)-Queue接口