【力扣】15.三数之和

server/2025/2/2 22:13:23/

AC截图

题目

思路

这道题如果简单的用暴力三重遍历去做,会超时。所以我们思考假如有三个下标,i,l,r

其中i=0(初始),l=i+1 r=nums.size()-1

我们固定nums[i]的值,那么就转换为两数之和,我们需要找到nums[l]+nums[r]==-nums[i]

假如我们对数组排序,那么记target=-nums[i],sum=nums[l]+sum[r]

①如果sum==target,即为所求,l++,r--

②如果sum<target,为了得到更大的sum,只能l++

③如果sum>target,为了减小sum,只能r--

接下来,就是一些剪枝操作。比如数组中存在重复的数字,就需要跳过。

①假如已经有sum==target并且进行了l++,r--

此时如果存在与sum[l]或者sum[r]相同的值,必然得到的是相同的数组,就需要使用l++或者r--跳过

②如果出现了num[i]值重复,由于上一个循环已经得到了所有的序列,此时也应给使用continue跳过

代码

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;sort(nums.begin(),nums.end());for(int i=0;i<nums.size();i++){if(i>0 && nums[i]==nums[i-1]) continue;int l=i+1;int r=nums.size()-1;int target = -nums[i];while(l<r){int sum = nums[l]+nums[r];if(sum==target){res.push_back({nums[i],nums[l],nums[r]});l++;r--;while(l<r && nums[l]==nums[l-1]){l++;}while(l<r && nums[r]==nums[r+1]){r--;}}else if(sum>target){r--;}else{l++;}}}return res;}
};


http://www.ppmy.cn/server/164439.html

相关文章

Vue.js组件开发-如何实现异步组件

在Vue中&#xff0c;异步组件允许在需要的时候才加载组件&#xff0c;而不是在应用初始化时就加载所有组件&#xff0c;这有助于提高应用的性能&#xff0c;特别是对于大型应用。 步骤 创建异步组件&#xff1a;使用defineAsyncComponent函数来定义异步组件。在父组件中使用异…

Java动态代理:原理与实现

在Java编程中&#xff0c;代理模式是一种常见的设计模式&#xff0c;它允许我们通过一个代理对象来控制对另一个对象的访问。代理模式的主要目的是在不改变原始类代码的情况下&#xff0c;增强或修改其行为。Java中的代理分为静态代理和动态代理两种。本文将重点介绍动态代理&a…

【已解决】redisCache注解失效,没写cacheConfig

环境配置 jdk11 springboot 2.6.13 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>3.2.0</version> </dependency><dependency>&l…

什么是Javascript,有什么特点

Javascript JavaScript 是一种广泛使用的编程语言&#xff0c;主要用于在网页上添加交互性和动态功能。 它最初由 Netscape 公司的 Brendan Eich 在 1995 年开发&#xff0c;并迅速成为 Web 开发的标准之一。 主要特点 解释型语言&#xff1a; JavaScript 是一种解释型语言&…

DeepSeek-R1 论文解读 —— 强化学习大语言模型新时代来临?

近年来&#xff0c;人工智能&#xff08;AI&#xff09;领域发展迅猛&#xff0c;大语言模型&#xff08;LLMs&#xff09;为通用人工智能&#xff08;AGI&#xff09;的发展开辟了道路。OpenAI 的 o1 模型表现非凡&#xff0c;它引入的创新性推理时缩放技术显著提升了推理能力…

Visual Studio使用GitHub Copilot提高.NET开发工作效率

GitHub Copilot介绍 GitHub Copilot 是一款 AI 编码助手&#xff0c;可帮助你更快、更省力地编写代码&#xff0c;从而将更多精力集中在问题解决和协作上。 GitHub Copilot Free包含哪些功能&#xff1f; 每月 2000 代码补全&#xff0c;帮助开发者快速完成代码编写。 每月 …

SAP SD学习笔记27 - 请求计划(开票计划)之1 - 定期请求(定期开票)

上两章讲了贩卖契约&#xff08;框架协议&#xff09;的概要&#xff0c;以及贩卖契约中最为常用的 基本契约 - 数量契约和金额契约。 SAP SD学习笔记26 - 贩卖契约(框架协议)的概要&#xff0c;基本契约 - 数量契约_sap 框架协议-CSDN博客 SAP SD学习笔记27 - 贩卖契约(框架…

MySQL知识点总结(十二)

请说明EXPLAIN语句的作用 EXPLAIN语句能够生成SQL语句的执行计划&#xff0c;显示出优化器如何执行该SQL语句的最优路径。可以用来检查SELECT,INSERT,REPLCAE,UPDATE和DELETE语句。 为什么使用索引会比全表扫描提供更好的查询性能&#xff1f; 索引是一个方案对象&#xff0…