三数之和
0x1 题目详情
0x2 解题思路
0x3 具体代码
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result=new ArrayList<>();
if(nums== null || nums.length<3){
return result;
}
//
Arrays.sort(nums);
int[] curResult=null;
int left=0;
int right=0;
int target=0;
//使用curPtr遍历每个nums中的每个元素
for(int i=0;i<nums.length;i++){
//对于每一个元素,如果和前一个元素相等,表示这个元素的三数之和已经求过了
//直接跳过就行了
if(i-1>-1 && nums[i-1]==nums[i]){
continue;
}
left=i+1;
right=nums.length-1;
target=-nums[i];
while(left<right){
if(nums[left]+nums[right]<target){
left++;
}else if(nums[left]+nums[right]>target){
right--;
}else{
if(right+1<nums.length && nums[right]==nums[right+1]){
right--;
continue;
}
//如果当前right指向的元素和right+1相等,直接跳过,因为包含
//right+1的三数之和结果已经求过了,left-1同理
else if(left-1>i && nums[left-1]== nums[left]){
left++;
continue;
}
result.add(Arrays.asList(new Integer[]{nums[i],nums[left],nums[right]}));
right--;
left++;
}
}
}
return result;
}
}0x4 课后总结
Last updated