LeetCode第16~20题解

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,因此要用absif (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)returnfor 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.hqwc.cn/news/87973.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【golang】15、cobra cli 命令行库

Cobra 是 golang 最流行的命令行库&#xff0c;文档见 一、脚手架 mkdir pt && cd pt && go mod init cobra-cli init # 在项目下运行即可生成脚手架# tree . ├── LICENSE ├── cmd # 生成了cmd目录 │ └── root.go # 生成了root.go, 其中定义了ro…

NeRFMeshing - 精确提取NeRF中的3D网格

准确的 3D 场景和对象重建对于机器人、摄影测量和 AR/VR 等各种应用至关重要。 NeRF 在合成新颖视图方面取得了成功&#xff0c;但在准确表示底层几何方面存在不足。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 我们已经看到了最新的进展&#xff0c;例如 NVIDIA 的 …

RecyclerView面试问答

RecycleView 和 ListView对比: 使用方法上 ListView:继承重写 BaseAdapter,自定义 ViewHolder 与 converView优化。 RecyclerView: 继承重写 RecyclerView.Adapter 与 RecyclerView.ViewHolder。设置 LayoutManager 来展示不同的布局样式 ViewHolder的编写规范化,ListVie…

25-非父子通信 - event bus 事件总线

作用:非父子组件之间&#xff0c;进行简易消息传递。(复杂场景 -> Vuex) 1.创建一个都能访问到的事件总线(空 Vue 实例) -> utils/EventBus.js import Vue from vue const Bus new Vue() export default Bus 2. A组件(接收方),监听 Bus实例 的事件(支持多个组件同时监…

stackoverflow问题

Stack Overflow requires external JavaScript from another domain, which is blocked or failed to load. stackoverflow引用了谷歌中被屏ajax.googleapis.com的jquery.min.js文件。“https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js” 方案1.打开网站…

css元素定位:通过元素的标签或者元素的id、class属性定位

前言 大部分人在使用selenium定位元素时&#xff0c;用的是xpath元素定位方式&#xff0c;因为xpath元素定位方式基本能解决定位的需求。xpath元素定位方式更直观&#xff0c;更好理解一些。 css元素定位方式往往被忽略掉了&#xff0c;其实css元素定位方式也有它的价值&…

DEA创建maven项目,项目结构无src目录和pom.xml文件内容

File > Settings > Build,Execution,Deployment > Build Tools > Maven > Runnner,界面中VM Options 输入框中填入-DarchetypeCataloginternal&#xff0c;重启IDEA&#xff0c;打开即会有src目录和pom.xml文件。 -DarchetypeCataloginternal -DarchetypeCatal…

Docker harbor私有仓库部署与管理

一、搭建本地私有仓库二、Harbor私有仓库部署与管理1、Harbor概述2、Harbor的特性3、Harbor的核心组件3.1 Proxy3.2 Registry3.3 Core services3.3.1 UI&#xff08;harbor-ui&#xff09;3.3.2 WebHook3.3.3 Token 服务 3.4 Database&#xff08;harbor-db&#xff09;3.5 Log…

C语言这么没用??

今日话题&#xff0c;C语言真的这么不堪吗&#xff1f;最近我兄弟向我倾诉&#xff0c;他在几天前受到老板的责骂&#xff0c;原因是他只懂C语言编程&#xff0c;无法达到老板的期望。其实不是C语言不堪&#xff0c;而是嵌入式领域复杂性多种多样&#xff0c;需要灵活的解决方案…

面试题-React(七):React组件通信

在React开发中&#xff0c;组件通信是一个核心概念&#xff0c;它使得不同组件能够协同工作&#xff0c;实现更复杂的交互和数据传递。常见的组件通信方式&#xff1a;父传子和子传父 一、父传子通信方式 父组件向子组件传递数据是React中最常见的一种通信方式。这种方式适用…

成都智慧企业发展研究院总经理郑小华:践行双轮驱动,为能源电力数智化注入新活力丨数据猿专访...

大数据产业创新服务媒体 ——聚焦数据 改变商业 随着全球经济走向数字化&#xff0c;中国正处于这一浪潮的前沿&#xff0c;进行前所未有的技术与产业深度融合。政府在2023年2月印发的《数字中国建设整体布局规划》等政策下&#xff0c;明确展示了对数字经济的支持与鼓励&…

ASUS华硕天选4笔记本电脑FA507XV原厂Windows11系统22H2

天选四FA507X原装系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件 华硕电脑管家、奥创控制中心等预装程序&#xff0c;恢复出厂状态W11 链接&#xff1a;https://pan.baidu.com/s/1SPoFW7wR5KawGu-yMckNzg?pwdayxd 提取码&#xff1a;ayxd