LeetCode 15. 3Sum

Leetcode | C++ 15.3Sum 题意 中文描述 给定一个包含n个整数的数列S, 找出所有的独特的3个数列中的元素a,b,c使得a + b + c = 0。 注意: 结果集只包含不重复的三元组。 题解 算法及复杂度(382 ms) 本题与第1题(Two Sum)有类似之处,从题目上就可以看出来,第1题是两个数的和,而本题是求三个数的和。 由于要求三元组不能重复,所以可以想到进行排序,这样就可以很容易的发现重复的三元组。为什么通过排序容易发现重复结果?如果在无序的数列中进行操作,得到了满足a + b +c = 0之后,还需要对三元组的重复情况 阅读详情

 For example, given array S = {-1 0 1 2 -1 -4},

    A solution set is:
    (-1, 0, 1)
    (-1, -1, 2)

【解析】

K Sum问题是一个系列,博客 http://tech-wonderland.NET/blog/summary-of-ksum-problems.html 总结得比较完整,有兴趣可以去看。

作为初学者,我们用最简洁的思路来说一下这道题怎么解。

暴力解决法是每个人都能想到的,三层for循环,时间复杂度是O(n^3),而且还要处理重复的问题,显然不是题目想要的解法。

那能不能降到O(n^2)?排序算法的时间复杂度为O(nlgn),小于O(n^2),那么我们不妨先对数组排个序。

排序之后,我们就可以对数组用两个指针分别从前后两端向中间扫描了,如果是 2Sum,我们找到两个指针之和为target就OK了,那 3Sum 类似,我们可以先固定一个数,然后找另外两个数之和为第一个数的相反数就可以了。

代码不难,先看了再说。

java

 public List<List<Integer>> threeSum(int[] nums) {;
        List<List<Integer>> result=new ArrayList<List<Integer>>();
        if(nums==null||nums.length<3) return result;
        sort(nums);
        for(int i=0;i<nums.length;i++){
            if(i>0&&nums[i-1]==nums[i]) continue;
            find(nums,i+1,nums[i],result);
        }
        return result;
    }
    public void find(int[] nums,int start,int x, List<List<Integer>> result){
        int l=start;
        int w=nums.length-1;
        while(l<w){
            if(x+nums[l]+nums[w]==0){
                List<Integer> temp=new ArrayList<Integer>();
                temp.add(x);
                temp.add(nums[l]);
                temp.add(nums[w]);
                result.add(temp);
                while(l<w&&nums[l]==nums[l+1]) l++;
                while(l<w&&nums[w]==nums[w-1]) w--;
                l++;
                w--;
            }else{
                if(x+nums[l]+nums[w]<0){
                    l++;
                }
                else{
                    w--;
                }
            }
        }
    }
    public void sort(int[] nums){
        for(int i=1;i<nums.length;i++){
            int temp=nums[i-1];
            if(i>0&&nums[i-1]>nums[i]){
                temp=nums[i];
                int j=i-1;
                while(j>=0&&temp<nums[j]){
                    nums[j+1]=nums[j];
                    j--;
                  
                }
                nums[j+1]=temp;
            }
        }
    }

注意,对于 num[i],寻找另外两个数时,只要从 i+1 开始找就可以了。

这种写法,可以避免结果集中有重复,因为数组时排好序的,所以当一个数被放到结果集中的时候,其后面和它相等的直接被跳过。


优化:该算法testcase时容易超时,主要是因为没有对特殊情况进行处理,如:avoid duplicate, z is too small,z is too large,z is the boundary
 z = nums[i];
            if (i > 0 && z == nums[i - 1])// avoid duplicate
                continue;
            if (z + 3 * max < target) // z is too small
                continue;
            if (4 * z > target) // z is too large
                break;
            if (4 * z == target) { // z is the boundary
                if (i + 3 < nums.length && nums[i + 3] == z) {
                    List<Integer> temp = new ArrayList<Integer>();
                    temp.add(z);
                    temp.add(z);
                    temp.add(z);
                    temp.add(z);
                    result.add(temp);
                }
                break;
            }


参考:http://blog.youkuaiyun.com/ljiabin/article/details/40620579

Keras深度学习实战(32)——基于LSTM预测股价 股价预测是时间序列预测中最具挑战性的问题之一,研究股价预测问题具有重要的理论意义和应用价值。针对循环神经网络在股价预测中存在的长期依赖等缺点,本文引入了长短时记忆神经网络以提高股价预测的效果。同时,我们把有关公司的新闻标题的文本数据作为模型的输入变量时,发现预测效果更好,因此我们可以把有关公司的新闻标题的文本数据作为一个有效的输入变量。最后,通过利用 Keras 实现了以上两个股价预测模型,并进行了性能分析和对比。 阅读详情

相关推荐

AIGC在游戏行业的应用:革新游戏开发与体验

AIGC(人工智能生成内容)技术正在深刻改变游戏行业,从开发到体验全面革新。在游戏开发中,AIGC可用于自动生成关卡、角色和剧情,提升开发效率;在资源制作中,通过AI生成场景、角色模型等,降低成本。

1667

LeetCode 力扣:15.3Sum + 16.3Sum Closest + 18.4Sum 排序 + 双指针遍历 题目+算法分析+Cpp解答

15.3Sum 排序 + 双指针遍历: ​ 首先,将给定的数组进行排序(从小到大的顺序)。 ​ 遍历排序后的数组中的每一个数,如果这个数之前已经讨论过了则可以跳过。 ​ 将取出的数作为“目标”,使用双指针在排序后的数组中找另外的两个数: ​ 一个左指针指向该取出的数的后一个数,即此时的最低位。 ​ 另一个右指针指向数组的最后一个数,即此时的最高位。 ​ 由于数组已经是从小到...

WULH 1177

Unity中的坐标系及其转换方法

Unity中的坐标系及其转换方法 Unity中有四种坐标系: 1.全局坐标系 World Coordinate System 全局坐标系是用于描述场景内所有物体位置的方向的基准,也称为世界坐标系,Unity中创建的物体都是以全局坐标系中的坐标原点(0,0,0),来确定各自的位置的,可以使用transform.position来获取游戏对象的世界坐标。 2.局部坐标系 Local Coordinate System 局部坐标系也称为模型坐标系或物体坐标系,每个物体都有自身独立的物体坐标系。当物体移动或改变方向

Z_hongli的博客 8179

Leetcode15 3Sum(C++)

Leetcode15 3Sum(C++) 文章目录Leetcode15 3Sum(C++)题目论述思考分析code(c++) 题目论述 链接: Leetcode15 3Sum 概述: Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all ...

cbb944131226的博客 756

PINN——加入物理约束的神经网络

【摘要】 基于物理信息的神经网络(Physics-informed Neural Network, 简称PINN),是一类用于解决有监督学习任务的神经网络,它不仅能够像传统神经网络一样学习到训练数据样本的分布规律,而且能够学习到数学方程描述的物理定律。与纯数据驱动的神经网络学习相比,PINN在训练过程中施加了物理信息约束,因而能用更少的数据样本学习到更具泛化能力的模型。本文主要解析这种神经网络以...

qq_39444290的博客 4585

【gridsample】地平线征程6芯片中gridsample算子的优化与部署实践

本文详细介绍了地平线征程6芯片中gridsample算子的优化与部署实践,重点探讨了PTQ和QAT量化方案在BEV感知任务中的应用。通过双线性插值优化、内存布局调整和混合精度配置等关键技术,显著提升了算子在自动驾驶场景下的性能和精度,为开发者提供了实用的部署指南和调优建议。

zero1的博客 1020

LeetCode——15.3Sum

首次使用LeetCode学习算法设计,希望通过本次学习可以提高自己对各种算法的了解。 本次选择的题目是15.3Sum,属于medium难度。该题目的描述是"Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triple

parishong的博客 314

山东大学软件工程应用与实践——GMSSL开源库(六)——SM9密钥交换协议

2021SC@SDUSC 文章目录基本概念符号及辅助算法SM9密钥交换协议 基本概念 1976年,Diffie和Hellman在其题为《密码学的新方向》的论文中首次给出了公钥密码学的定义,并提出了Diffie-Hellman密钥交换算法。该算法解决了对称密码体制中的密钥分发问题,使得通信双方可以通过公开信道安全地交换共享密钥。 使用SM9通信的双方通过对方的标识和自身的私钥,经过两次或者可选的三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥。该密钥可以作为对称密码算法的会话密钥,其中可选步骤用来实

m0_51588039的博客 1988

Leetcode 15. 3Sum (python)

题目 解法1:hash table + sort triplets 这解法T了,应该是T在遍历之前储存的pair那边。不过我个人感觉这种做法比较直观 class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: pairs = collections.defaultdict(list) n = len(nums) ans = set()

qq_37821701的博客 549

拆解英飞凌CoolGaN:如何用Silvaco TCAD仿真评估功率GaN HEMT的关键性能(BV、Qg、开关损耗)

本文详细解析了如何使用Silvaco TCAD仿真工具评估英飞凌CoolGaN功率GaN HEMT的关键性能指标,包括击穿电压(BV)、栅电荷(Qg)和开关损耗。通过精确建模极化效应、优化边缘终端结构以及高频开关损耗仿真技术,为功率器件工程师提供了一套完整的'设计-仿真-验证'方法论,助力GaN HEMT在快充、数据中心电源等领域的应用。

weixin_29159995的博客 429

三甲医院网络架构与安全建设实战

华为OceanStor] [华为OceanStor][PACS存储双活] [HIS数据库同步]患者隐私 数据脱敏 天清Web防火墙动态脱敏策略。主数据中心 --[OTV专线]-- 备数据中心。实现医疗业务网/卫生专网/互联网三网隔离。核心业务配置(华为CE6865)自动备份配置(每天02:00)安全事件响应(30分钟SLA)漏洞扫描(每周日00:00)实现医疗物联网统一接入管控。五、等保2.0合规关键配置。堡垒机登录(双因素认证)四、医疗物联网安全方案。

有小小的远大抱负 1911

Leetcode 15. 3Sum 三数之和

Leetcode 15. 3Sum 三数之和 标签(空格分隔): Leetcode 题目地址:https://leetcode-cn.com/problems/3sum/ 题目描述 给定一个包含 n 个整数的数组&nbsp;nums,判断&nbsp;nums&nbsp;中是否存在三个元素 a,b,c ,使得&nbsp;a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中...

CoderWangSon 196

国科大学习资料--数据挖掘(刘莹)--第三章习题及参考答案

国科大学习资料–数据挖掘(刘莹)–第三章习题及参考答案 国科大学习资料–数据挖掘(刘莹)–第三章习题及参考答案 国科大学习资料–数据挖掘(刘莹)–第三章习题及参考答案 第 3 章分类与回归 3.1简述决策树分类的主要步骤。 答:决策树生成的过程如下: (1)对数据源进行数据预处理, 得到训练集和测试集; (2)对训练集进行训练; (3)对初始决策树进行树剪枝; (4)由所得到的决策树提取分类规则; (5)使用测试数据集进行预测,评估决策树模型; 3.2给定决策树,选项有:(1)将决策树转换成规则,然后对结果

无名何许人的博客 3093

leetcode记录15. 3Sum

leetcode记录15. 3Sum class Solution { public: vector&lt;vector&lt;int&gt;&gt; threeSum(vector&lt;int&gt;&amp; nums) { sort(nums.begin(), nums.end()); vector&lt;vector&lt;int...

我的博客 143

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[LeetCode] 15. 3Sum

原题链接: https://leetcode.com/problems/3sum/ 1. 题目描述 2. 解题思路 Java中List的用法 List是一个有序的集合,允许存储项的值为空,也允许相等值的存储项。 List&amp;amp;amp;amp;amp;lt;String&amp;amp;amp;amp;amp;gt; ex=new ArrayList&amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;gt;();

Ber03的博客 214

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LeetCode-15. 3Sum [C++]

Given an arraynumsofnintegers, are there elementsa,b,cinnumssuch thata+b+c= 0? Find all unique triplets in the array which gives the sum of zero.

贫道绝缘子的博客 443

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【每日一题】Leetcode - 15. 3Sum

Leetcode - 15. 3Sum

qq_43209531的博客 321

[leetcode]15. 3Sum

[leetcode]15. 3Sum Analysis 中秋节了,中午要去吃海底捞—— [嘻嘻~] Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives t...

weixin_32135877的博客 122

LeetCode 15: 3Sum题解(python)

Leetcode 42: Trapping Rain Water 分类:Two pointers 难度:M 描述:给了一个数组,问数组中存不存在a, b, c三个元素,使a + b + c = 0。把这些数组都找出来。 Given array nums = [-1, 0, 1, 2, -1, -4], A solution set is: [ [-1, 0, 1], [-1, -1, 2] ] 链接: 3Sum. 思路: 本题使用双指针法,遍历数组,然后每次遍历中使用前后指针搜索是否存在满足条件

Bourns_A的博客 363

Leetcode 15. 3Sum (Array)

Leetcode 15. 3Sum (Medium) (java) Tag: Array, Two Pointers Difficulty: Medium Discription:Given an arraynumsofnintegers, are there elementsa,b,cinnumssuch thata+b+c= 0? Find a...

dengyao9100的博客 145

LeetCode15. 3Sum

LeetCode15. 3Sum 题目: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: The so

mohuak的博客 280

算法练习- LeetCode 15. 3Sum

算法练习- LeetCode 15. 3Sum

qq_41758969的博客 394

Leetcode 15. 3Sum

题目描述:找出任意三个数和为0的子集合,并列出出来,不可有重复。 题目链接:Leetcode 15. 3Sum 用递归的做法在31就超时了,一共313个case。 一般数组的题目要想加速 就要额外空间 hashmap做记忆或者两个指针的办法,一定要学会转化问题。 待定一个数 找这个数之后的数组所有不重复两个数相加和为此数的组合。 如果sum改成其他的数 只需要把求fix的步骤改一下就好了。 ...

Za七杂⑧ 196

[leetcode] 15. 3Sum

15. 3Sum Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note: The solution set must not cont

CodePikachu的博客 364
上一篇: 函数异步执行,并传递传参
下一篇: leetcode 3. Longest Substring Without Repeating Characters
kotomi_du
博客等级 码龄10年 5粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值