内容简介:Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note:The solution set must not contain duplicate triplets.
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
The solution set must not contain duplicate triplets.
Example:
Given array nums = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
难度:medium
题目:
给定一长度为n的数组,是否存在三元素之和为0? 找出所有使其和为0的不同的三元组。
注意:
返回的结果中不要含有重复元素。
思路:
数组 排序 后使用双重循环固定一个值,再使内循环由两头向中间计算。
Runtime: 56 ms, faster than 52.39% of Java online submissions for 3Sum.
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
if (null == nums || nums.length < 1) {
return result;
}
Arrays.sort(nums);
int n = nums.length;
for (int i = 0; i < n - 1; i++) {
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
for (int left = i + 1, right = n - 1; left < right; ) {
if (left > (i + 1) && nums[left] == nums[left - 1]) {
left++;
continue;
}
if (right < (n - 1) && nums[right] == nums[right + 1]) {
right--;
continue;
}
int sum = nums[i] + nums[left] + nums[right];
if (0 == sum) {
result.add(Arrays.asList(nums[i], nums[left++], nums[right--]));
} else if (sum > 0) {
right--;
} else {
left++;
}
}
}
return result;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
挑战程序设计竞赛
秋叶拓哉、岩田阳一、北川宜稔 / 巫泽俊、庄俊元、李津羽 / 人民邮电出版社 / 2013-7-1 / CNY 79.00
世界顶级程序设计高手的经验总结 【ACM-ICPC全球总冠军】巫泽俊主译 日本ACM-ICPC参赛者人手一册 本书对程序设计竞赛中的基础算法和经典问题进行了汇总,分为准备篇、初级篇、中级篇与高级篇4章。作者结合自己丰富的参赛经验,对严格筛选的110 多道各类试题进行了由浅入深、由易及难的细致讲解,并介绍了许多实用技巧。每章后附有习题,供读者练习,巩固所学。 本书适合程序设计......一起来看看 《挑战程序设计竞赛》 这本书的介绍吧!