50题 第9天 三数之和
- 给定一个包含 n 个整数的数组nums,判断 nums 中是否存在三个元素 a,b,c ,
使得 a + b + c =0 ?找出所有满足条件且不重复的三元组。 - 链接: 力扣.
- 我的代码如下:
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
if(nums==null)
return null;
Arrays.sort(nums);
List<List<Integer>> ans=new ArrayList<List<Integer>>();
for(int i=0;i<nums.length-2;i++){
if(i>=1&&nums[i]==nums[i-1])
continue;
int j=i+1,k=nums.length-1;
while(j<k){
if(nums[i]+nums[j]+nums[k]==0){
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[i]+nums[j]+nums[k]>0)
k--;
else j++;} }
return ans; }
}
运行结果
- 这道题狠狠地打败了我,没能按时完成,最后也是学的别人的算法做的。
- 我总结一下失败的原因
1、对处理 List<List>的不熟悉,没有办法调用相关的函数。
2、刚开始的时候执着于暴力法,因为嫌麻烦,没有先进行排序,殊不知arraysort的排序功能非常便捷。
3、知道使用双指针法后,没有办法构建这个算法,尤其是对去重没有很好地办法。
自信的以为可以在晚上做完实验以后结束这道题,但是却没有实现,还差的很多,继续努力吧。