代码之旅:我的算法探索之路(二)力扣 最接近的三数之和

目录

LeetCode 第16题 最接近的三数之和

题目

解题思路

代码

结果

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 <= nums.length <= 1000
  • -1000 <= nums[i] <= 1000
  • -104 <= target <= 104

解题思路

此题目同上次的三数之和问题解法大致相同,很多leetcode题目近似题目的解法都是互通的

代码之旅:我的算法探索之路(一)力扣 两数之和 三数之和问题-CSDN博客

  • 首先对数组进行排序,因为我们要动态的根据当前值和target的差距,来变化我们的三个指针,使得我们的三个数之和能认为更加接近target
  • 然后,我们进行range遍历,注意要点就是遍历的终点是len(nums) - 2,因为我们要保证能够组成三个数字的三元组
  • 接下来,初始化left,right的逻辑为left = i - 1 以及right = len(nums) - 1
  • 为了遍历所有的可能,我们通过while循环来实现,while循环的逻辑是当left小于right,不能等于,因为此时三个数就重了,不能大于,否则三元组就重复了
  • 我们会维护一个初始值为无穷大的值,在python通过closest_sum = float('inf')实现,当作最接近target的sum结果,然后不断更新这个值

代码

class Solution:def threeSumClosest(self, nums, target):nums.sort()  closest_sum = float('inf')     for i in range(len(nums) - 2):  left, right = i + 1, len(nums) - 1  while left < right:current_sum = nums[i] + nums[left] + nums[right]if abs(current_sum - target) < abs(closest_sum - target):closest_sum = current_sumif current_sum < target:left += 1elif current_sum > target:right -= 1else:return target  return closest_sum

结果

LeetCode 第18题 四数之和

题目

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

  • 0 <= a, b, c, d < n
  • abc 和 d 互不相同
  • 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 <= nums.length <= 200
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109

解题思路

此题目和三数之和求解非常之像

代码之旅:我的算法探索之路(一)力扣 两数之和 三数之和问题-CSDN博客

针对此题仍然采用双指针的思想

常规解题暴力解法需要4重循环,双指针相当于替代了两重循环,时间复杂度更优

  • 首先对数组进行排序,使得我们可以动态根据target的大小比较来决定双指针移动方向
  • 第一重循环要设置终点是nums数组长度-3,因为要保证有四个数字构成四元组
  • 接下来进行判重逻辑,如果此数字和上个位置数字一样,则此轮跳过,因为上重就处理了此数字的四元组结果了
  • 第二重for循环和判重同第一重for循环一致
  • 接下来是不断移动两个指针,同寻找三数之和一样
  • 现在之和大于target,则要让四元组变小,right左移,反之left右移
  • 两轮判重逻辑,如果left,right指针路径上连续几个数字都一样,则跳过避免重复

代码

class Solution(object):def fourSum(self, nums, target):nums.sort()results = []for i in range(len(nums) - 3):if i > 0 and nums[i] == nums[i - 1]:continuefor j in range(i + 1, len(nums) - 2):if j > i + 1 and nums[j] == nums[j - 1]:continueleft = j + 1right = len(nums) - 1while(left < right):total = nums[i] + nums[j] + nums[left] + nums[right]if total < target:left += 1elif total > target:right -= 1else:results.append([nums[i], nums[j], nums[left], nums[right]])while left < right and nums[left] == nums[left + 1]:left += 1while left < right and nums[right] == nums[right - 1]:right -= 1left += 1right -= 1return results

结果

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

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

相关文章

mysql如何开启远程访问?

MySQL是一种常见的关系型数据库管理系统&#xff0c;广泛应用于各行各业。默认情况下&#xff0c;MySQL仅允许本地访问&#xff0c;即只能在本地主机上进行数据库操作。有时候我们需要通过远程连接访问MySQL数据库&#xff0c;以便实现更灵活的管理和操作。本文将介绍如何在MyS…

vue3+elementPlus:el-table-column表格列动态设置单元格颜色

:cell-style属性 //html<el-tableempty-text"暂无数据":data"datalist.table":max-height"height"row-key"id"border:cell-style"cellStyle"> <el-table>//js //动态设置单元格颜色 const cellStyle ({ row, c…

如何将当前目录的github.com替换为镜像源(kkgithub.com)

find . -type f -exec sed -i ‘s/github.com/kkgithub.com/g’ {} 这个命令会执行以下操作&#xff1a;find .: 在当前目录及其所有子目录中递归搜索文件。 -type f: 指定只搜索普通文件&#xff08;regular files&#xff09;&#xff0c;排除目录等其他类型的文件。 -exec…

【C++干货基地】六大默认成员函数: This指针 | 构造函数 | 析构函数

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

平台工程指南:从架构构建到职责分工

平台工程只是 DevOps 专业化的另一个术语&#xff0c;还是另有所指&#xff1f;事实可能介于两者之间。DevOps 及其相关的 DevXOps 有着浓厚的文化色彩&#xff0c;以各个团队为中心。不幸的是&#xff0c;在许多地方&#xff0c;DevOps 引发了新的问题&#xff0c;如工具激增和…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑净负荷均衡的分布式光伏集群电压调控策略研究》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

智引未来:2024年科技革新引领工业界变革与机遇

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

MS5188N——16bit、8 通道、500kSPS、 SAR 型 ADC

产品简述 MS5188N 是 8 通道、 16bit 、电荷再分配逐次逼近型模数 转换器&#xff0c;采用单电源供电。 MS5188N 拥有多通道、低功耗数据采集系统所需的所有 组成部分&#xff0c;包括&#xff1a;无失码的真 16 位 SAR ADC &#xff1b;用于将输入配 置为单端输入…

算法优化 —— 注意力机制篇

文章目录 前言一、EMA 高效多尺度注意力机制(ICASSP2023)二、BiFormer: 基于动态稀疏注意力构建高效金字塔网络架构(2023CVPR)前言 提示:这里可以添加本文要记录的大概内容: 一、EMA 高效多尺度注意力机制(ICASSP2023) 原论文链接 代码如下: class EMA(nn.Module

【观点】区块链的未来:分布式商业;企业的未来:分布式商业生态战略

本文内容摘自思二勋所著的《分布式商业生态战略》一书。 近两年&#xff0c;商业经济环境的不确定性越来越明显&#xff0c;市场经济受到疫情、技术、政策等多方因素影响越来越难以预测&#xff0c;黑天鹅事件时有发生。在国内外经济方面&#xff0c;国际的地缘政治对商业经济…

消息队列-Kafka-消费方如何分区与分区重平衡

消费分区 资料来源于网络 消费者订阅的入口&#xff1a;KafkaConsumer#subscribe 消费者消费的入口&#xff1a;KafkaConsumer#poll 处理流程&#xff1a; 对元数据重平衡处理&#xff1a;KafkaConsumer#updateAssignmentMetadataIfNeeded 协调器的拉取处理&#xff1a;onsum…

LVGL在VScode中安装模拟器运行配置笔记教程

1、LVGL模拟器工程搭建 LVGL(Light and Versatile Graphics Library,轻巧而多功能的图形库)是一个免费的开放源代码图形库,它提供创建具有易于使用的图形元素,精美的视觉效果和低内存占用的嵌入式GUI所需的一切。本文主要讲述如何实现在VScode中实现LVGL模拟器环境的搭建运行。…