题目:

分析:
这是最容易想到的做法,但是有明显的问题,时间复杂度达到0(n3),并且没有去重。

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int length = nums.size();vector<vector<int>> resultV;for(int i = 0;i < length;i++){for(int j = i+1;j<length;j++){for(int k = j+1;k<length;k++){if(nums[i]+nums[j]+nums[k] == 0){vector<int> middle;middle.push_back(nums[i]);middle.push_back(nums[j]);middle.push_back(nums[k]);resultV.push_back(middle);}}}}return resultV;}
};

他的主要问题是没有去重,而且时间复杂度过高。
如何解决呢?可以尝试使用双指针,对给定的数组先进行一个排序,然后进行确定好首元素后,通过两个指针,对另外两个元素进行分析。

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int n = nums.size();sort(nums.begin(), nums.end());vector<vector<int>> ans;// 枚举 afor (int first = 0; first < n; ++first) {// 需要和上一次枚举的数不相同if (first > 0 && nums[first] == nums[first - 1]) {continue;}// c 对应的指针初始指向数组的最右端int third = n - 1;int target = -nums[first];// 枚举 bfor (int second = first + 1; second < n; ++second) {// 需要和上一次枚举的数不相同if (second > first + 1 && nums[second] == nums[second - 1]) {continue;}// 需要保证 b 的指针在 c 的指针的左侧while (second < third && nums[second] + nums[third] > target) {--third;}// 如果指针重合,随着 b 后续的增加// 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环if (second == third) {break;}if (nums[second] + nums[third] == target) {ans.push_back({nums[first], nums[second], nums[third]});}}}return ans;}
};

leetcode刷题:三数之和相关推荐

  1. LeetCode刷题-两数之和(持续更新)

    文章目录 LeetCode 1. Two Sum (两数之和) 题目描述 样例 解题思路一(暴力法) 解题思路二(使用map) 前言:最近业余时间,一直在看LeetCode上面的题,上面有许多好的解题 ...

  2. leetcode算法题--三数之和

    原题链接:https://leetcode-cn.com/problems/3sum/ 排序+双指针法 先将数列从小到大排序 先选择一个数,这一步时间复杂度为O(n) 在这个数后面的数中用双指针分别从 ...

  3. leetcode系列--15.三数之和

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

  4. leetcode No.15-16 三数之和相关问题

    leetcode 15. 三数之和 题目 链接:https://leetcode-cn.com/problems/3sum 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 ...

  5. 力扣第十五题-三数之和

    前言 力扣第十五题 三数之和 如下所示: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复 ...

  6. LeetCode实战:三数之和

    题目英文 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...

  7. leetcode(一)刷题两数之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 示例 1: 输入:nums = [2,7,11,15 ...

  8. leetCode刷题--两数相加

    给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设除了数字 0 ...

  9. LeetCode第一题两数之和---JavaScript

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一 ...

  10. 刻意练习:LeetCode实战 -- Task04. 三数之和

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

最新文章

  1. AI近10年21个子领域高引学者(AI-10 Most Influential Scholars )
  2. 使用 SQLServer On Linux 作为开发数据库遇到的编码问题
  3. k8s挂载目录_云原生存储详解:容器存储与 K8s 存储卷
  4. Kafka设计解析(六)- Kafka高性能架构之道
  5. python中的pygame模块使用方法_Pygame的基本使用
  6. linux shell的组成,理解Linux中子shell的概念
  7. dlut-KFQ概率上机2
  8. Mongodb常规操作【一】
  9. MP3 Encoder for mac(MP3编码器)修复版
  10. 安卓+JAVA实例开发源码
  11. htc G18 一键解锁,3键root
  12. PyQt4入门教程(1)_PyQt介绍及准备工作
  13. 重大建设项目土地勘测定界涉及基本农田怎么计算
  14. 微信公众平台版面设计需要服务器,公众号版面设计,微信公众号中排版怎么弄...
  15. Open CASCADE Technology(OCCT)概述
  16. A* 流程+代码详细注释
  17. HTML及CSS学习笔记 06 - CSS简介和常见的选择器
  18. 数学符号 参考手册大全
  19. spin协议 matlab 仿真,无线传感网络高效路由协议设计
  20. 人在江湖,身不由己【武侠古龙】

热门文章

  1. 《图解Http》 2-6章: 基础,报文,状态码,首部。
  2. bzoj 2257[Jsoi2009]瓶子和燃料 数论/裴蜀定理
  3. (@WhiteTaken)设计模式学习——组合模式
  4. 文件上传限制文件类型
  5. tensorflow conv2d的padding解释以及参数解释
  6. EventBus的使用
  7. [jboss] 运行多个JBoss实例
  8. SQL数据库语言基础之SqlServer视图的创建、修改与视图数据的增删改查
  9. php mb strlen 开启,php mb_strlen是什么函数
  10. idea安装lua插件_IntelliJ EmmyLua 1.1.9发布,IDEA的Lua插件