leetcode刷题:三数之和
题目:
分析:
这是最容易想到的做法,但是有明显的问题,时间复杂度达到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刷题:三数之和相关推荐
- LeetCode刷题-两数之和(持续更新)
文章目录 LeetCode 1. Two Sum (两数之和) 题目描述 样例 解题思路一(暴力法) 解题思路二(使用map) 前言:最近业余时间,一直在看LeetCode上面的题,上面有许多好的解题 ...
- leetcode算法题--三数之和
原题链接:https://leetcode-cn.com/problems/3sum/ 排序+双指针法 先将数列从小到大排序 先选择一个数,这一步时间复杂度为O(n) 在这个数后面的数中用双指针分别从 ...
- leetcode系列--15.三数之和
leetcode 第15题 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三 ...
- leetcode No.15-16 三数之和相关问题
leetcode 15. 三数之和 题目 链接:https://leetcode-cn.com/problems/3sum 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 ...
- 力扣第十五题-三数之和
前言 力扣第十五题 三数之和 如下所示: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复 ...
- LeetCode实战:三数之和
题目英文 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...
- leetcode(一)刷题两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 示例 1: 输入:nums = [2,7,11,15 ...
- leetCode刷题--两数相加
给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设除了数字 0 ...
- LeetCode第一题两数之和---JavaScript
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一 ...
- 刻意练习:LeetCode实战 -- Task04. 三数之和
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...
最新文章
- AI近10年21个子领域高引学者(AI-10 Most Influential Scholars )
- 使用 SQLServer On Linux 作为开发数据库遇到的编码问题
- k8s挂载目录_云原生存储详解:容器存储与 K8s 存储卷
- Kafka设计解析(六)- Kafka高性能架构之道
- python中的pygame模块使用方法_Pygame的基本使用
- linux shell的组成,理解Linux中子shell的概念
- dlut-KFQ概率上机2
- Mongodb常规操作【一】
- MP3 Encoder for mac(MP3编码器)修复版
- 安卓+JAVA实例开发源码
- htc G18 一键解锁,3键root
- PyQt4入门教程(1)_PyQt介绍及准备工作
- 重大建设项目土地勘测定界涉及基本农田怎么计算
- 微信公众平台版面设计需要服务器,公众号版面设计,微信公众号中排版怎么弄...
- Open CASCADE Technology(OCCT)概述
- A* 流程+代码详细注释
- HTML及CSS学习笔记 06 - CSS简介和常见的选择器
- 数学符号 参考手册大全
- spin协议 matlab 仿真,无线传感网络高效路由协议设计
- 人在江湖,身不由己【武侠古龙】
热门文章
- 《图解Http》 2-6章: 基础,报文,状态码,首部。
- bzoj 2257[Jsoi2009]瓶子和燃料 数论/裴蜀定理
- (@WhiteTaken)设计模式学习——组合模式
- 文件上传限制文件类型
- tensorflow conv2d的padding解释以及参数解释
- EventBus的使用
- [jboss] 运行多个JBoss实例
- SQL数据库语言基础之SqlServer视图的创建、修改与视图数据的增删改查
- php mb strlen 开启,php mb_strlen是什么函数
- idea安装lua插件_IntelliJ EmmyLua 1.1.9发布,IDEA的Lua插件