域名注册网站制作,杭州知名设计公司,iis网站属性在哪,怎么用网站做调查表目录 1.题目2.答案3.提交结果截图 链接#xff1a; 三数之和 1.题目
给你一个整数数组 nums #xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k #xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请
你返回所有和为 0 且不重复… 目录 1.题目2.答案3.提交结果截图 链接 三数之和 1.题目
给你一个整数数组 nums 判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k 同时还满足 nums[i] nums[j] nums[k] 0 。请
你返回所有和为 0 且不重复的三元组。
**注意**答案中不可以包含重复的三元组。
示例 1
输入nums [-1,0,1,2,-1,-4]
输出[[-1,-1,2],[-1,0,1]]
解释
nums[0] nums[1] nums[2] (-1) 0 1 0 。
nums[1] nums[2] nums[4] 0 1 (-1) 0 。
nums[0] nums[3] nums[4] (-1) 2 (-1) 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意输出的顺序和三元组的顺序并不重要。示例 2
输入nums [0,1,1]
输出[]
解释唯一可能的三元组和不为 0 。示例 3
输入nums [0,0,0]
输出[[0,0,0]]
解释唯一可能的三元组和为 0 。提示
3 nums.length 3000-105 nums[i] 10^5 2.答案
class Solution {public ListListInteger threeSum(int[] nums) {// 记录位置Arrays.sort(nums);MapInteger, ListInteger positionMap new HashMap();for (int i 0; i nums.length; i) {if (positionMap.containsKey(nums[i])) {ListInteger positions positionMap.get(nums[i]);positions.add(i);} else {ListInteger positions new ArrayList();positions.add(i);positionMap.put(nums[i], positions);}}// 双指针遍历ListListInteger result new ArrayList();SetString distinctSet new HashSet();for (int i 0; i nums.length nums[i] 0; i) {if (i ! 0 nums[i] nums[i - 1]) {continue;}for (int j nums.length - 1; j 0 nums[j] 0 j i; j--) {if (j ! nums.length - 1 nums[j] nums[j 1]) {continue;}int a nums[i];int b nums[j];int c -a - b;if (c nums[0] || c nums[nums.length - 1]) {continue;}ListInteger list Arrays.asList(a, b, c);list.sort(Integer::compareTo);String distinct String.format(%d_%d_%d, list.get(0), list.get(1), list.get(2));if (positionMap.containsKey(c) !distinctSet.contains(distinct)) {distinctSet.add(distinct);ListInteger positions positionMap.get(c);for (int position : positions) {if (position ! i position ! j) {result.add(list);break;}}}}}return result;}
}3.提交结果截图 整理完毕完结撒花~