LeetCode第16~20题解

news2025/1/19 11:28:13

CONTENTS

    • LeetCode 16. 最接近的三数之和(中等)
    • LeetCode 17. 电话号码的字母组合(中等)
    • LeetCode 18. 四数之和(中等)

LeetCode 16. 最接近的三数之和(中等)

【题目描述】

给你一个长度为 n 的整数数组 nums 和一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。

【示例1】

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

【示例2】

输入:nums = [0,0,0], target = 1
输出:0

【提示】

3 ≤ n u m s . l e n g t h ≤ 1000 3\le nums.length\le 1000 3nums.length1000
− 1000 ≤ n u m s [ i ] ≤ 1000 -1000\le nums[i]\le 1000 1000nums[i]1000
− 1 0 4 ≤ t a r g e t ≤ 1 0 4 -10^4\le target\le 10^4 104target104

【分析】


和第15题相似,和 target 最接近的数可能是大于等于 target 的最小的数,也可能是小于等于 target 的最大的数。前者和第15题一样,枚举指针 i i i,然后用双指针 j j j k k k 求出大于等于 target 的最小的数。由于我们之前的实现方式是将 k k k 从右向左移动,找到 nums[i] + nums[j] + nums[k] >= target最小 k k k,因此我们可以得出 nums[i] + nums[j] + nums[k - 1] < target k − 1 k-1 k1 是满足该式的最大 k k k(需要注意保证 k − 1 ≠ j k-1\ne j k1=j)。


【代码】

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        sort(nums.begin(), nums.end());
        pair<int, int> res(INT_MAX, 0);
        for (int i = 0; i < nums.size(); i++)
        {
            for (int j = i + 1, k = nums.size() - 1; j < k; j++)
            {
                while (j < k - 1 && nums[i] + nums[j] + nums[k - 1] >= target) k--;
                int s1 = nums[i] + nums[j] + nums[k], s2 = nums[i] + nums[j] + nums[k - 1];
                res = min(res, make_pair(abs(s1 - target), s1));  // 不一定会大于等于0,因此要用abs
                if (j < k - 1)  // 确保j和k-1不是一样的才能使用nums[k-1]
                    res = min(res, make_pair(target - s2, s2));  // 一定小于0
            }
        }
        return res.second;
    }
};

LeetCode 17. 电话号码的字母组合(中等)

【题目描述】

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

在这里插入图片描述

【示例1】

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

【示例2】

输入:digits = ""
输出:[]

【示例3】

输入:digits = "2"
输出:["a","b","c"]

【提示】

0 ≤ d i g i t s . l e n g t h ≤ 4 0\le digits.length\le 4 0digits.length4
digits[i] 是范围 ['2', '9'] 的一个数字。

【分析】


直接 DFS 爆搜即可。


【Python代码】

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        d2str = ['', '', 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
        res = []
    
        def dfs(digits: str, u: int, now: str):
            if u == len(digits):
                res.append(now)
                return
            for c in d2str[int(digits[u])]:
                dfs(digits, u + 1, now + c)

        dfs(digits, 0, '')
        return [] if not digits else res

LeetCode 18. 四数之和(中等)

【题目描述】

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

  • 0 <= a, b, c, d < n
  • abcd 互不相同
  • nums[a] + nums[b] + nums[c] + nums[d] == target

你可以按任意顺序返回答案 。

【示例1】

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

【示例2】

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

【提示】

1 ≤ n u m s . l e n g t h ≤ 200 1\le nums.length\le 200 1nums.length200
− 1 0 9 ≤ n u m s [ i ] ≤ 1 0 9 -10^9\le nums[i]\le 10^9 109nums[i]109
− 1 0 9 ≤ t a r g e t ≤ 1 0 9 -10^9\le target\le 10^9 109target109

【分析】


和第15题一样,暴力枚举四个数时间复杂度为 O ( n 4 ) O(n^4) O(n4),使用双指针算法可以优化成 O ( n 3 ) O(n^3) O(n3)。需要注意本题四个数相加可能会溢出。


【代码】

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

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

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

相关文章

request+python操作文件导入

业务场景&#xff1a; 通常我们需要上传文件或者导入文件如何操作呢&#xff1f; 首先通过f12或者通过抓包查到请求接口的参数&#xff0c;例如&#xff1a; 图中标注的就是我们需要的参数&#xff0c;其中 name是参数名&#xff0c;filename是文件名&#xff0c;Content-Type是…

服务器数据恢复-重组RAID导致RAID6数据丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 一台存储设备中有一组由12块硬盘组建的RAID6磁盘阵列&#xff0c;上层采用EXT3文件系统&#xff0c;共划分3个LUN。 服务器故障&分析&#xff1a; 存储设备在运行过程中RAID6阵列突然不可用&#xff0c;管理员对故障存储进行了重新分配RAI…

算法设计 || 第7题:TSP问题的成本矩阵

&#xff08;一&#xff09;TSP问题学习 看不懂可以观看这个老师视频学习&#xff1a;分支限界法(TSP问题,多段图的最短路径问题,任务分配问题,批处理作业调度问题)(算法设计第十周二节)_哔哩哔哩_bilibili &#xff08;二&#xff09; 考试例题 画出计算求解最优解的分支界限过…

CentOS7关闭防火墙的操作方法

使用命令&#xff1a;systemctl status firewalld.service 查看防火墙状态 执行后能看到绿色字样标注的“active(running)”&#xff0c;说明防火墙是开启状态 使用命令&#xff1a;systemctl stop firewalld.service 关闭运行的防火墙 关闭后&#xff0c;使用命令systemctl st…

恒运资本:重磅利好预期升温!央行大动作,成长股关键变量生变

尽管上周末利好齐发&#xff0c;但应该还有利好在路上&#xff01; 从银行间商场拆借利率来看&#xff0c;最近银行的资金好像在收紧。而据财政部音讯&#xff0c;本年新增专项债券力求在9月底前根本发行结束&#xff0c;用于项目建造的专项债券资金力求在10月底前使用结束。这…

jvm的内存区域

JVM 内存分为线程私有区和线程共享区&#xff0c;其中方法区和堆是线程共享区&#xff0c;虚拟机栈、本地方法栈和程序计数器是线程隔离的数据区。 1&#xff09;程序计数器 程序计数器&#xff08;Program Counter Register&#xff09;也被称为 PC 寄存器&#xff0c;是一块…

Vue3+TS+Vite中 vConsole 插件的使用

平时在web应用开发过程中&#xff0c;我们可以console.log去输出一些信息&#xff0c;但是在移动端&#xff0c;也就是在手机上&#xff0c;console.log的信息我们是看不到的&#xff0c;这时候就需要移动端调试工具vConsole 1. 依赖安装 npm install vconsole 或者 yarn ad…

亚马逊反馈和评论的区别

在亚马逊上&#xff0c;"反馈"&#xff08;Feedback&#xff09;和"评论"&#xff08;Review&#xff09;是两个不同的概念&#xff0c;它们分别用于描述购买者与商品或卖家之间的不同方面。 1、反馈&#xff08;Feedback&#xff09;&#xff1a; 亚马逊的…

【Python开发环境搭建】【Pycharm设置】 新建python文件默认添加编码格式、时间、作者、文件名等信息

1、设置路径 打开pycharm&#xff0c;选择File->Settings&#xff08;Ctrl Alt S&#xff09;&#xff0c;Editor->File and Templates->Python Script 文件- 设置-编辑器-文件和代码模板-Python Script 2、设置内容 # -*- coding: utf-8 -*- # Time : ${DATE} …

pom.xml配置文件失效,显示已忽略的pom.xml --- 解决方案

现象&#xff1a; 在 Maven 创建模块Moudle时,由于开始没有正确创建好&#xff0c;所以把它删掉了&#xff0c;然后接着又创建了与一个与之前被删除的Moudle同名的Moudle时&#xff0c;出现了 Ignore pom.xml&#xff0c;并且新创建的 Module 的 pom.xml配置文件失效&#xf…

zookeeper启动失败(Error contacting service. It is probably not running.)

问题描述 启动zk时报如下错误&#xff1a; 解决办法 先查日志找找报错原因&#xff1a; 找到zk安装目录下的logs文件夹下的日志文件&#xff0c;查看连接失败原因&#xff1a; 如果是端口问题&#xff0c;修改conf文件&#xff0c;指定端口重新启动即可&#xff1a; 注&a…

springboot1.5.12升级至2.6.15

首先&#xff0c;加入springboot升级大版本依赖&#xff0c;会在升级过程中打印出错日志提示&#xff08;升级完毕可去除&#xff09; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-properties-migrator</art…

DP读书:鲲鹏处理器 架构与编程(十一)鲲鹏生态软硬件构成

鲲鹏生态软硬件构成 鲲鹏软件构成硬件特定软件1. Boot Loader2. SBSA 与 SBBR3. UEFI4. ACPI 鲲鹏软件构成 鲲鹏处理器的软件生态是一个不断发展的软件生态&#xff0c;服务器本身也具有复杂度多样性&#xff0c;经过很长时间的发展服务器硬件有不同的操作系统方案&#xff0c…

为什么 Higress 是 Knative 入口网关的最佳实践?

作者&#xff1a;赵伟基&#xff08;兆维&#xff09; 在传统的应用开发中&#xff0c;通常需要管理底层的基础设施、服务器与网络配置等方面的工作。然而在云原生 Serverless 化的浪潮下&#xff0c;这些基础设施的细节被抽象和自动化&#xff0c;开发者无需关注服务器等配置…

如何通过内网穿透实现外部网络对Spring Boot服务端接口的HTTP监听和调试?

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

【附安装包】谷歌浏览器安装教程

软件下载 软件&#xff1a;谷歌浏览器版本&#xff1a;110.0.5181语言&#xff1a;简体中文大小&#xff1a;1.3M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.59GHz 内存2G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://p…

学乐多光屏P90:智能引领儿童学习新时代

随着科技的迅猛发展&#xff0c;儿童教育正逐渐迈入数字化时代。在这个变革的浪潮中&#xff0c;学乐多光屏P90以其卓越的功能和深刻的教育理念&#xff0c;成为了智能儿童学习领域的引领者&#xff0c;为孩子们开启了全新的学习体验。 融合创新技术&#xff0c;引领学习变革 …

【Flutter】Flutter 使用 flutter_timezone 获取当前操作系统的时区

【Flutter】Flutter 使用 flutter_timezone 获取当前操作系统的时区 文章目录 一、前言二、flutter_timezone 包的背景三、安装和基本使用四、深入理解时区五、实际业务中的用法六、完整示例七、总结 一、前言 大家好&#xff01;我是小雨青年&#xff0c;今天我想和大家分享一…

Tensorflow调用训练好的yolov5模型进行推理

文章目录 1、安装TensorFlow-GPU版本1.2、验证是否安装正常 2、将训练好的pt文件转换成onnx文件2.2、什么是Onnx模型和Tensorflow模型2.1、将onnx文件转换成pb文件 1、安装TensorFlow-GPU版本 1、创建虚拟环境python3.8 conda create -n TF2.4 python3.82、进入虚拟环境 conda…