力扣热门100题之三数之和【中等】

news2024/11/27 5:36:03

题目描述

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

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

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

提示:
在这里插入图片描述
解法1:三重for循环暴力破解

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
    nums.map(num=>parseInt(num));
    nums.sort((a,b)=>a-b)
    let s=[]
    let s1=[]
    for(let i=0;i<nums.length;i++){
        for(let j=i+1;j<nums.length;j++){
            for(let k=j+1;k<nums.length;k++){
                if(nums[i]+nums[j]+nums[k]==0){
                    let arr=[nums[i],nums[j],nums[k]].sort((a,b)=>a-b);
                    let str=arr.join("")
                    if(s1.indexOf(str)==-1){
                        s.push(arr);
                        s1.push(str);
                    }
                }
            }
        }
    }
    return s
};

执行结果:
在这里插入图片描述


解法2:双指针

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
    if(nums==null||nums.length<3) return [];
    nums.map(num=>parseInt(num));
    nums.sort((a,b)=>a-b)
    let s=[]
    let left=0;
    let right=0;
    for(let i=0;i<nums.length-1;i++){
        if(nums[i]>0) break;
        if(i>0&&nums[i]==nums[i-1]){
            continue;
        }else{
            left=i+1;
            right=nums.length-1;
            while(left<right){
                if(nums[i]+nums[left]+nums[right]>0){
                    //太大了 
                    right--;
                }else if(nums[i]+nums[left]+nums[right]<0){
                    //有点小
                    left++;
                }else{
                    s.push([nums[i],nums[left],nums[right]]);
                    while(left<nums.length-1&&nums[left++]==nums[left+1]){}
                    while(right>left&&nums[right--]==nums[right]){}
                }
            }
        }
    }
    return s
};

在这里插入图片描述
解法3:动态规划算法

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
let s=[]
let tmp=[0,0,0];
let usedIndex=[-1,-1,-1];
let str=[]
let numss=[]
var threeSum = function(nums) {
    if(nums==null||nums.length<3) return [];
    s=[]
    tmp=[0,0,0];
    usedIndex=[-1,-1,-1];
    str=[]
    nums.map(num=>parseInt(num));
    nums.sort((a,b)=>a-b)
    numss=nums;
    dfs(0)
    return s
};
function dfs(p){
    if(p==3){
        tmp=[numss[usedIndex[0]],numss[usedIndex[1]],numss[usedIndex[2]]]
        if(tmp[0]+tmp[1]+tmp[2]==0){
            tmp.sort((a,b)=>parseInt(a)-parseInt(b))
            let s1=tmp.join("")
            if(str.indexOf(s1)==-1){
                s.push([tmp[0],tmp[1],tmp[2]])
                str.push(s1)
            }
        }
        return
    }
    for(let i=0;i<numss.length;i++){
        if(usedIndex.indexOf(i)==-1){
            usedIndex[p]=i;            
            dfs(p+1);
        }
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/780338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT 最佳实践指南

GPT Best Practices GPT 最佳实践指南 This guide shares strategies and tactics for getting better results from GPTs. The methods described here can sometimes be deployed in combination for greater effect. We encourage experimentation to find the methods that…

Java类的封装

封装将类的某些信息隐藏在类内部&#xff0c;不允许外部程序直接访问&#xff0c;只能通过该类提供的方法来实现对隐藏信息的操作和访问。 例如&#xff1a;一台计算机内部极其复杂&#xff0c;有主板、CPU、硬盘和内存&#xff0c; 而一般用户不需要了解它的内部细节&#xff…

涤生大数据教学集群的首次运维现场复现

事故背景交代 涤生大数据花费重金购得几台较高配置的阿里云服务器机器&#xff0c;构建了一整套以cdh为核心的大数据课程教学、学员实操练习环境、但是&#xff0c;就是这个但是&#xff0c;以为集群规模目前相对较小。不会有什么幺蛾子发生&#xff0c;于是运维中最核心的监控…

[Linux] CentOS7 中 pip3 install 可能出现的 ssl 问题

由于解决问题之后, 才写的博客, 所以没有图片记录. 尽量描述清楚一些 今天写代码的时候, 突然发现 文件里用了#define定义宏之后, coc.nvim的coc-clangd补全就用不了 :checkhealth了一下, 发现nvim忘记支持python3了 尝试pip3 install neovim的时候, 发现会警告然后安装失败.…

设计模式结构型——代理模式

目录 代理模式的用途 代理模式的实现 静态代理 JDK动态代理 CGLIB动态代理 代理模式的特点 与其他模式比较 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许通过创建一个代理对象来间接访问原始对象。代理模式的核心思想是将对目…

20230721在WIN10下安装openssl并解密AES-128加密的ts视频切片

20230721在WIN10下安装openssl并解密AES-128加密的ts视频切片 2023/7/21 22:58 1、前言&#xff1a; AES-128加密的ts视频切片【第一个】&#xff0c;打开有时间限制的&#xff01; https://app1ce7glfm1187.h5.xiaoeknow.com/v2/course/alive/l_64af6130e4b03e4b54da1681?typ…

小鹏G6吹响汽车智能化普惠号角

监制 | 何玺 排版 | 叶媛 小鹏G6大卖。目前其订单的交车周期已经长达12周。这款主打智能化的“未来之车”&#xff0c;已经正式吹响了汽车智能化普及的号角。 01 订单排满&#xff0c;小鹏G6成“爆款” 7月11日&#xff0c;小鹏汽车董事长何小鹏在社交媒体上发了一张照片&am…

Flink笔记

Flink笔记 2.Flink学习笔记2.1流式处理对比2.2 Flink核心概念2.2.1并行度2.2.2算子链2.2.3任务槽 2.3 DataStream2.3.2 读取数据源-源算子&#xff08;Source&#xff09;2.3.3 转换算子&#xff08;Transformation&#xff09; 2.Flink学习笔记 2.1流式处理对比 学习Spark S…

Django设置权限管理

目录 整体思路 1.使用django自带的后台功能添加组和用户 启动django服务后&#xff0c;在Django终端添加一个账号 在网页上输入网址&#xff0c;跳转到登录页面 Groups 新增组&#xff0c;设置组的名字&#xff0c;对应的权限Save即可 Users 将用户绑定组或单独设置权限 2.用…

arm-day2

汇编实现三个灯循环点亮 .text .global _start _start: /**********LED1点灯**************/ RCC_TNIT:ldr r0,0x50000a28ldr r1,[r0]orr r1,r1,#(0x1 << 4)orr r1,r1,#(0x1 << 5)str r1,[r0]LED_TNIT:ldr r0,0x50006000ldr r1,[r0]and r1,r1,#(~(0x3 << 20…

珠海市黄杨山之旅游

西湾村 早上6点半出门&#xff0c;买点五人份的早餐 A点 第一个点&#xff0c;冲 C点 D岛 到d点休息 B点 高度&#xff1a;229米 到这里有人吐了&#xff0c;建议早餐不要吃超过三个包子&#xff08;他吃了四个包子&#xff0c;1个鸡蛋&#xff0c;1个火腿&#xff09; 记…

linux高并发web服务器开发(web服务器)18_函数解析http请求, 正则表达式,sscanf使用,http中数据特殊字符编码解码

pdf详情版 01 学习目标 编写函数解析http请求 ○ GET /hello.html HTTP/1.1\r\n ○ 将上述字符串分为三部分解析出来编写函数根据文件后缀&#xff0c;返回对应的文件类型sscanf - 读取格式化的字符串中的数据 ○ 使用正则表达式拆分 ○ [^ ]的用法通过浏览器请求目录数据 ○…

Window环境RabbitMq搭建部署

Erlang下载安装及配置环境变量 下载erlang&#xff0c;原因在于RabbitMQ服务端代码是使用并发式语言Erlang编写的 Erlang下载 Erlang官网下载&#xff1a; http://www.erlang.org/downloads Erlang国内镜像下载&#xff08;推荐&#xff09;&#xff1a; http://erlang.org/d…

mysql主从复制(主-从-从)

文章目录 一、前期环境准备二、主库配置1.设置server-id值并开启binlog参数2.建立同步账户并给上权限3.查看主库状态4.锁表设置只读5.备份数据库数据 三、从库配置1.设置server-id值并开启binlog参数2.还原从主库备份数据3.设定从主库同步4.启动从库同步开关 四.测试1.在主库上…

力扣 -- 121. 买卖股票的最佳时机

题目&#xff1a; 题目链接&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 解题步骤&#xff1a; 下面是用动态规划的思想解决这道题的过程&#xff0c;相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。说明&#xff1a;以下这种方法并…

【动态规划part02】| 62.不同路径、63.不同路径||

目录 &#x1f388;LeetCode 62.不同路径 &#x1f388;LeetCode 63. 不同路径 II &#x1f388;LeetCode 62.不同路径 链接&#xff1a;62.不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向…

jQuery基本介绍和 DOM 对象互相转换

文章目录 jQuery基本介绍和 DOM 对象互相转换基本介绍jQuery 的原理示意图JQuery 基本开发步骤说明:jQuery简单示例 jQuery 对象和 DOM 对象什么是 jQuery 对象DOM 对象转成 jQuery 对象应用实例 jQuery 对象转成 DOM 对象代码演示 jQuery基本介绍和 DOM 对象互相转换 基本介绍…

设计模式篇---工厂方法(可通过lambda实现)

文章目录 概念结构实例通过lambda实现总结 概念 工厂方法模式&#xff1a;定义一个用于创建对象的接口&#xff0c;但是让子类决定将哪个类实例化。工厂方法模式让一个类的实例化延迟到其子类。 这个模式还是比较好理解&#xff0c;且使用场景比较频繁。简单工厂是只有一个工厂…

使用 Vue 创建一个简单的 Loading 动画

使用 Vue 创建一个简单的 Loading 动画 1. 开始之前 确保 正确安装了 Vue 3知道如何启动一个新的 Vue 项目&#xff08;或在项目中使用Vue&#xff09;了解 Vue 3 的 Composition API&#xff08;本文将使用&#xff09; 2. 设计组件 该组件应该包含三个部分 控制逻辑旋转…

Centos7:Flask-Apache部署

系列文章目录 RHCE第0章&#xff1a;RHCE开始前的准备 RHCE第1章&#xff1a;Web服务器&#xff08;上&#xff09; RHCE第1章&#xff1a;Web服务器&#xff08;下&#xff09; RHCE第2章&#xff1a;DNS服务 RHCE第3章&#xff1a;DHCP服务器 RHCE第4章&#xff1a;Firewall…