算法篇——N个数之和大集合(js版)

news2024/11/6 9:29:29

1.两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。
链接:https://leetcode.cn/problems/two-sum

 

var twoSum = function(nums, target) {
    var indexList = [];
    var map = new Map();
    for(var i = 0; i < nums.length; i++) {
        // 遍历当前值时去找Map中可以得到目标值的加数
        var add = map.get(target - nums[i]);
        // 能找到就放入结果数组
        if(add != null) {
            indexList.push(add, i);
            return indexList;
        }
        // 否则将当前值放入map中
        map.set(nums[i], i);
    }
};
//2:0

15.三数之和

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

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

注意:答案中不可以包含重复的三元组。
链接:https://leetcode.cn/problems/3sum

var threeSum = function(nums) {
    var numList = [];
    var nList = nums.sort((a, b) => a - b);
    // 如果有序数组第一个元素大于0,则返回null
    if(nList[i] > 0) return numList;
    for(var i = 0; i < nList.length; i++) {
        var left = i + 1, right = nums.length - 1;
        // 去重
        if(nList[i] == nList[i - 1]) continue;
        while(left < right) {
            var sum = nList[left] + nList[i] + nList[right];
            // 说明三数之和大了,right向左移动
            if(sum > 0) right--;
            // 说明三数之和小了,left向右移动
            else if(sum < 0) left++;
            else {
                numList.push([nList[i], nList[left], nList[right]]);
                // 去重
                while(nList[left] == nList[left + 1]){
                    left++;
                }
                while(nList[right] == nList[right - 1]) {
                    right--;
                }
                left++
                right--;
            }
        }  
    }
    return numList;
};

18.四数之和

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。
链接:https://leetcode.cn/problems/4sum

var fourSum = function(nums, target) {
    var numList = [];
    var nList = nums.sort((a, b) => a - b);
    // 达不到四数之和的要求
    if(nums.length < 4) return numList;
    for(var i = 0; i < nList.length - 3; i++) {
        // 去重
        if(i > 0 && nList[i] == nList[i - 1]) continue;
        for(var j = i + 1; j < nList.length - 2; j++) {
            // 去重
            if(j > i + 1 && nList[j] == nList[j - 1]) continue;
            var left = j + 1, right = nList.length - 1;
            while(left < right) {
                var sum = nList[i] + nList[j] + nList[left] + nList[right];
                // 说明和大了,right向左移动
                if(sum > target) right--;
                // 说明和小了,left向右移动
                else if(sum < target) left++;
                else {
                    numList.push([nList[i], nList[j], nList[left], nList[right]]);
                    // 去重
                    while(nList[left] == nList[left + 1]){
                        left++;
                    }
                    while(nList[right] == nList[right - 1]) {
                        right--;
                    }
                    left++
                    right--;
                }
            }  
        }
    }
    return numList;
};

454.四数相加Ⅱ

给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
链接:https://leetcode.cn/problems/4sum-ii

var fourSumCount = function(nums1, nums2, nums3, nums4) {
    var map = new Map();
    var count = 0;
    // 前两个数组的求和遍历
    for(var i1 of nums1) {
        for(var i2 of nums2) {
            var sum = i1 + i2;
            // 和作为key,次数作为value
            map.set(sum, (map.get(sum) || 0) + 1)
        }
    }
    // 后两个数组的求和遍历
    for(var i3 of nums3) {
        for(var i4 of nums4) {
            var sum = i3 + i4;
            // 和作为key,次数作为value
            count += (map.get(-sum) || 0);
        }
    }
    return count;
};

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

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

相关文章

如何招生?一文教你高职院校有效的招生技巧

生源&#xff0c;是每一所高校的生存之本和生命线。 近几年招生宣传工作作为高职院校招生工作中的重要环节之一&#xff0c;具有政策性强&#xff0c;涉及面广&#xff0c;工作量大等特点&#xff0c;直接关系到学校可持续发展问题。 随着新媒体时代的发展&#xff0c;高职院…

炫酷的3DCSS卡片样式

先效果图展示&#xff1a; 再上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>*,*::after,*::before {margin: 0;padding: 0;box-sizing: bord…

【LeetCode】94.二叉树的中序遍历

1.问题 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输入&#xff1a;root […

Vue3中使用 EventBus 实现兄弟组件传参

前言&#xff1a;EventBus vue3中没有了&#xff0c;EventBus&#xff0c;所以我们要自己写&#xff0c;但是非常简单。 步骤一&#xff1a;创建&#xff08;EventBus 容器&#xff09; 在src目录&#xff0c;创建个bus文件夹&#xff0c;存放 自己建立的 bus.js class Bus…

Springboot 中快速完成文件上传,整合多平台神器

哈喽&#xff0c;大家好~ 又是做好人好事的一天&#xff0c;有个小可爱私下问我有没有好用的springboot文件上传工具&#xff0c;这不巧了嘛&#xff0c;正好我私藏了一个好东西&#xff0c;顺便给小伙伴们也分享一下&#xff0c;demo地址放在文末了。 文件上传在平常不过的一…

1.黑马Springboot基础篇笔记

Springboot基础篇 1.快速上手Springboot 1.基础配置 1.parent 作用&#xff1a;指定jar包版本信息信息&#xff0c;避免依赖版本冲突 2.starter 作用:SpringBoot中常见项目名称&#xff0c;定义了当前项目使用的所有依赖坐标&#xff0c;以达到减少依赖配置的目的使用任意…

扬帆优配|逼近历史最高点!刚刚,A股这一板块沸腾!

今天早盘&#xff0c;A股整体小幅走强&#xff0c;上证指数创阶段性新高&#xff0c;并逼近年内最高点&#xff0c;科创50指数则大涨超2%领涨两市。 盘面上&#xff0c;新能源车、黄金、锂矿、建筑等板块涨幅居前&#xff0c;互联网、传媒娱乐、知识产权、博彩概念等板块跌幅居…

开源项目创始人的营销建议:让开源项目脱颖而出

来自开源创始人的营销建议 面对现实吧&#xff0c;如果你想让你的开源项目变成主业&#xff0c;就得投入一定的精力对它进行营销。 这并不意味着几篇空洞的文章加上夺人眼球的标题&#xff0c;而是要向用户清晰地传达产品的功能&#xff0c;并帮助他们轻松发现产品的优势。 本文…

什么是数智化招采?如何实现数智化招采(系统)?

数智化&#xff0c;是当今信息技术领域的一个热门话题。它的应用范围非常广泛&#xff0c;包括商业、医疗、科学、政府、城市、企业、社会等各个领域。随着现代信息技术的不断发展&#xff0c;数智化已经成为各行各业中的一个重要趋势。 什么是数智化招采 信息化是数据形成的…

ChatGPT实战100例 - (06) 10倍速可视化组织架构与人员协作流程

文章目录 ChatGPT实战100例 - (06) 10倍速可视化组织架构与人员协作流程一、需求与思路二、 组织架构二、 人员协作四、 总结 ChatGPT实战100例 - (06) 10倍速可视化组织架构与人员协作流程 一、需求与思路 管理研发团队的过程中&#xff0c;组织架构与人员协作流程的可视化是…

《商用密码应用与安全性评估》第一章密码基础知识1.7密码功能实现示例

保密性实现 访问控制&#xff1a;防止敌手访问敏感信息 信息隐藏&#xff1a;避免敌手发现敏感信息 信息加密&#xff1a;允许观测&#xff0c;但无法提炼信息 几种分组密码工作模式的区别&#xff1a; 名称全称优点缺点ECB电子密码本模式简单、快速、并行不抗重放CBC密码分组…

计算机:理解操作系统:内存篇(上)

内存篇 1. 什么是内存2. C/C内存模型2.1 代码段和数据段2.2 堆和栈 本节是操作系统系列教程的第三篇文章&#xff0c;属于操作系统第一章即基础篇&#xff0c;在真正开始操作系统相关章节前在这一部分回顾一些重要的主题&#xff0c;算是温故知新吧&#xff0c;以下是目录&…

瑞吉外卖项目——瑞吉外卖

软件开发整体介绍 软件开发流程 需求分析&#xff1a;产品原型、需求规格说明书 设计&#xff1a;产品文档、UI界面设计、概要设计、详细设计、数据库设计 编码&#xff1a;项目代码、单元测试 测试&#xff1a;测试用例、测试报告 上线运维&#xff1a;软件环境安装、配置…

Qt编写推流综合应用示例(文件推流/桌面推流/本地摄像头/网络摄像头/转发推流/视频分发)

一、功能特点 1.1 文件推流 指定网卡和监听端口&#xff0c;接收网络请求推送音视频等各种文件。实时统计显示每个文件对应的访问数量、总访问数量、不同IP地址访问数量。可指定多种模式&#xff0c;0-直接播放、1-下载播放。实时打印显示各种收发请求和应答数据。每个文件对…

Vivado布线和生成bit参数设置

本文主要介绍Vivado布线参数设置&#xff0c;基本设置方式和vivado综合参数设置基本一致&#xff0c;将详细说明如何设置布线参数以优化FPGA设计的性能&#xff0c;以及如何设置Vivado压缩BIT文件。 一、Vivado布线概述 Vivado布线是在FPGA设计中实现物理布局的关键步骤之一。…

C语言-字符串

sizeof和strlen 的区别&#xff1a; 区别1&#xff1a; 1.sizeof计算整个数组大小&#xff0c; 2.strlen 计算有效的数组大小 新建字符数组”hello“ char cdata[128]"hello"; printf("sizeof--cdata的长度&#xff1a;%d\n",sizeof(cdata)); pri…

Hive窗口函数全解

在SQL中有一类函数叫做聚合函数&#xff0c;例如sum()、avg()、max()等等&#xff0c;这类函数可以将多行数据按照规则聚集为一行&#xff0c;一般来讲聚集后的行数是要少于聚集前的行数的。但是有时我们想要既显示聚集前的数据&#xff0c;又要显示聚集后的数据&#xff0c;这…

零基础抽象MYSQL

既然完成了下载安装和密码登录&#xff0c;那么打开你的MYSQL MYSQL中最简单的 创建数据库、查看数据库、选择数据库、删除数据库 先从重要的创建数据库 直接输入create database data_a ; 注意了要打分号 &#xff1b; 如果查看你创建的数据库 show databases &#xff…

使用 Flask 快速构建 基于langchain 和 chatGPT的 PDF摘要总结

简介 这里不对 langchain 和 chatGPT 进行介绍&#xff0c;仅对实现过程进行整理 环境 Python >3.8 Flask2.2.3 Jinja23.1.2 langchain0.0.143 openai0.27.4 实现 总结功能 使用 langchain 和 openai 接口实现总结功能 实现逻辑&#xff1a;通过text_splitter 将pdf 分…

LeetCode 501: 二叉搜索树中的众数 | C++语言版

LeetCode 501. 二叉搜索树中的众数 | C语言版 LeetCode 501. 二叉搜索树中的众数题目描述解题思路思路一&#xff1a;使用迭代代码实现运行结果参考文章&#xff1a; 思路二&#xff1a;减少遍历节点数代码实现运行结果参考文章&#xff1a; LeetCode 501. 二叉搜索树中的众数 …