你今天学算法了吗?打卡第三天

你今天学算法了吗?打卡第三天,第1张

 


目录

 一、题目

1、题目描述

2、基础框架

3、原题链接

二、解题报告

1、思路分析

2、时间复杂度

3、代码详解

三、本题小知识


 一、题目
1、题目描述

  

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:

输入:nums = []
输出:[]
示例 3:

输入:nums = [0]
输出:[]

提示:

  • 0 <= nums.length <= 3000
  • -105 <= nums[i] <= 105
2、基础框架

   Java 版本给出的基础框架代码如下:   

class Solution {
    public List> threeSum(int[] nums) {
}
3、原题链接

    LeetCode 15. 三数之和

二、解题报告
1、思路分析

先排序,三数之和有三种情况,大于0,小于0,等于0,

等于0,则添加到我们的集合中,

小于0,则增大和,再和0比较

大于0,则减小和,再和0比较


2、时间复杂度

缺,后补!!!!!!!!!!!


3、代码详解
class Solution {
    public List> threeSum(int[] nums) {
       //排序数组
       Arrays.sort(nums);
       int n = nums.length;
        //存储结果的集合
       List>res = new ArrayList<>();
       int sum = 0;
        //遍历枚举
       for(int i=0;ilist = new ArrayList<>();
                   list.add(nums[i]);
                   list.add(nums[left]]);
                   list.add(nums[right]);
                    //检差res中是否存在list,不存在则添加
                   if(!res.contains(list)){
                       res.add(list);
                   }
                   //指针偏移
                   left++;
                   right--;
                //若和大于0,则把right左移
               }else if(sum>0){
                   right--;
                //和小于0,则把left右移
               }else{
                   left++;
               }
           }
       }
       return res;
    }
}
三、本题小知识

    三数之和,枚举;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/713357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存