dedecms网站根目录重庆专业网站设计服务

news/2025/9/23 19:49:28/文章来源:
dedecms网站根目录,重庆专业网站设计服务,网站开发技术选择,vi设计基本要素题目#xff1a; 给定一个包含 n 个整数的数组 nums 和一个目标值 target#xff0c;判断 nums 中是否存在四个元素 a#xff0c;b#xff0c;c 和 d #xff0c;使得 a b c d 的值与 target 相等#xff1f;找出所有满足条件且不重复的四元组。 注意#xff1a; …题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target判断 nums 中是否存在四个元素 abc 和 d 使得 a b c d 的值与 target 相等找出所有满足条件且不重复的四元组。 注意 答案中不可以包含重复的四元组。 示例 给定数组 nums [1, 0, -1, 0, -2, 2]和 target 0。 满足要求的四元组集合为 [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ] Python3解答代码 class Solution:def fourSum(self, nums: List[int], target: int) - List[List[int]]:# 排序nums数组nums.sort()# 初始化变量,初始化一个空列表result用于存储结果n len(nums)result []# 循环每个可能作为四元组的第一个数字nums[i]for i in range(n):# 如果 nums[i] 大于 target 并且都为正数后续元素只会更大就可以提前结束当前循环# 因为不可能存在四个数的和等于 targetif nums[i] target and nums[i] 0 and target 0:break# 第一层循环中的元素 nums[i]如果当前元素与前一个元素相同则直接跳过避免重复计算if i 0 and nums[i] nums[i-1]:continue# 内层循环遍历每个可能作为四元组第二个数字的 nums[j]for j in range(i1, n):if nums[i] nums[j] target and target 0:break# 跳过相同的 nums[j] 值以避免重复的四元组。if j i1 and nums[j] nums[j-1]:continue# 确定两个数之后使用双指针来查找后两个数使得四数之和等于target、left,right j1, n-1while left right:# 计算选中的四个数之和ss nums[i] nums[j] nums[left] nums[right]if s target:result.append([nums[i], nums[j], nums[left], nums[right]])# 为了避免重复的四元组需要移动left和right来跳过重复的元素# 只要 left 指向的元素与其右边相邻的元素相同就继续向右移动 left 指针while left right and nums[left] nums[left1]:left 1# 只要 right 指向的元素与其左边相邻的元素相同就继续向左移动 right 指针while left right and nums[right] nums[right-1]:right - 1# 完成上述循环后需要将 left 和 right 分别再向中间移动一位# 以避免重复计算当前的组合left 1right - 1# 四数之和小于目标值需要将left指针向右移动elif s target:left 1# 四数之和大于目标值,为了减少和的大小# 需要将 right 指针向左移动即向更小的数移动else:right - 1return result 上述代码实现过程解析 上述代码实现了在给定整数数组 nums 中找出所有四个元素的组合使得它们的和等于目标值 target。下面是代码的详细解释 排序数组首先对输入的整数数组 nums 进行排序。这样做的目的是为了在后续的处理中能更方便地进行去重和剪枝操作。 初始化变量获取数组的长度 n并初始化一个空列表 result 用于存储结果。 遍历数组使用两层循环遍历数组首先固定两个数 nums[i] 和 nums[j]其中 i 和 j 分别表示第一层循环和第二层循环的索引。这两个数将作为四个元素中的前两个。 剪枝操作在第一层循环中有两处剪枝操作 如果当前的 nums[i] 大于 target 并且都为正数就可以提前结束当前循环因为后续元素只会更大不可能满足条件。在第二层循环中如果当前的 nums[i] nums[j] 大于 target 并且 target 为正数同样可以提前结束当前循环。 去重操作**在每一层循环中都需要进行去重操作以避免重复的组合被计算。具体做法是 对于第一层循环中的元素 nums[i]如果当前元素与前一个元素相同则直接跳过避免重复计算。对于第二层循环中的元素 nums[j]如果当前元素与前一个元素相同则直接跳过避免重复计算。 双指针法找到剩余两个数**在固定了前两个数后剩余的两个数采用双指针法。定义两个指针 left 和 right 分别指向当前范围内的最左和最右的元素。然后循环移动这两个指针不断调整它们指向的元素直到找到符合条件的组合或者两个指针相遇。 判断条件和更新指针 如果四个数的和等于目标值 target则将这个组合添加到结果列表 result 中并同时更新指针 left 和 right以避免重复计算相同的组合。如果四个数的和小于目标值 target则将左指针 left 右移一位。如果四个数的和大于目标值 target则将右指针 right 左移一位。 返回结果最终返回结果列表 result其中存储了所有满足条件的四个元素的组合。 重难点解释 1.剪枝操作 剪枝指的是在搜索过程中通过一些条件判断提前结束不必要的搜索分支从而减少搜索空间提高算法效率。具体来说这段代码中的剪枝操作有两个地方 在第一层循环和第二层循环中通过比较当前元素与目标值的大小关系如果可以确定后续元素无法满足条件就提前结束当前循环。例如在第一层循环中如果 nums[i] 大于 target 并且都为正数后续元素只会更大就可以提前结束当前循环因为不可能存在四个数的和等于 target。 在第二层循环中通过比较当前两个元素的和与目标值的大小关系同样可以提前结束当前循环。如果 nums[i] nums[j] 大于 target 并且 target 为正数后续元素只会更大也可以提前结束当前循环。 2.if j i1 and nums[j] nums[j-1]: continue 解释为啥是i1 这段代码的意图是在固定了第一个数字 nums[i] 后跳过那些可能会导致重复四元组的第二个数字 nums[j]。这里的逻辑是 j i1这个条件用于确保 j 不仅仅是在 i1 的位置上也就是说j 应该至少是从 i2 的位置开始考虑。这是因为 当 j i1 时nums[j] 是在 nums[i] 后面的第一个元素此时没有前一个元素 nums[j-1] 与之相比较因此不需要进行去重判断。当 j i1 时表示 j 至少是第三个考虑的元素此时 nums[j-1] 存在并且位于 nums[j] 之前因此可以进行重复检查。 nums[j] nums[j-1]这个条件检查当前的元素 nums[j] 是否与它前一个元素 nums[j-1] 相等。如果相等说明使用当前的 nums[j] 可能会生成与前一个循环相同的四元组因此应该跳过当前的 nums[j]。 目的和重要性 防止重复结果如果不进行这样的去重相同的 nums[j] 值将在内层循环中多次使用与同一个 nums[i] 结合可能会导致生成重复的四元组。提高效率通过跳过重复元素可以减少不必要的计算和迭代这对于处理大数据集时尤为重要。 3.核心代码解释 if nums[i] nums[j] target and target 0:break限制 target 0 的原因主要是为了确保当目标值 target 是正数时这个剪枝逻辑才会生效。这样的条件设定对于整体算法的正确性和效率都有影响以下是几个关键点 1. 保证剪枝的适用性 当 target 是正数时如果两个数的和已经超过了 target继续在正数范围内添加更多的数会使得总和进一步增加从而不可能等于 target。这个逻辑在 target 是正数时显然有效。 2. 处理负数情况 如果 target 是负数或零上述剪枝条件可能不适用因为 当 target 是零或负数时可能需要包括负数在内的组合来达到 target。即使当前的两数之和已经超过了 target通过选择负数作为其他组成部分仍然有可能将总和调整至 target。对于负 target若当前两数之和大于 target但它们之间存在足够大的负数这些负数仍然可以使得最终的四数之和等于 target。 3. 避免不必要的逻辑应用 如果不加 target 0 这个条件那么对于负数 target 或 target 为零的情况剪枝可能导致漏掉有效的解。例如假设 target -10如果仅仅因为两个正数的和大于 -10 就停止搜索可能会错过一些包含负数且其和为 -10 的有效组合。 解释一下这个几句代码的实现 while left right and nums[left] nums[left1]:left 1while left right and nums[right] nums[right-1]:right - 1left 1right - 1elif s target:left 1else:right - 1return result 代码位于双指针搜索的环节用于在已经固定了两个数字之后在数组的剩余部分中寻找两个数使得这四个数的和等于给定的目标 target。这一部分是通过移动左指针 left 和右指针 right 来实现的。下面是详细的逻辑解释 判断当前四数之和 s s nums[i] nums[j] nums[left] nums[right] 首先计算当前选定的四个数的和 s并将其与目标 target 进行比较。 判断三种情况 四数之和等于目标值 (s target) 将符合条件的四元组 [nums[i], nums[j], nums[left], nums[right]] 添加到结果列表 result 中。 接下来为了避免重复的四元组需要移动 left 和 right 指针来跳过所有相同的元素。 while left right and nums[left] nums[left1]:left 1 while left right and nums[right] nums[right-1]:right - 1 left 1 right - 1这两个 while 循环分别用于 完成上述循环后需要将 left 和 right 分别再向中间移动一位以避免重复计算当前的组合。跳过右边重复的元素只要 right 指向的元素与其左边相邻的元素相同就继续向左移动 right 指针。跳过左边重复的元素只要 left 指向的元素与其右边相邻的元素相同就继续向右移动 left 指针。 四数之和小于目标值 (s target) 为了增加和的大小需要将 left 指针向右移动即向更大的数移动。 left 1 四数之和大于目标值 (s target) 为了减少和的大小需要将 right 指针向左移动即向更小的数移动。 right - 1 综上本文的对于力扣18. 四数之和的Python3解答仅仅是个人学习资料记录也十分高兴我的见解可以帮助其他的正在做这个题目的同学基础较差仅仅是个人见解大神勿喷欢迎交流谢谢

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

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

相关文章

网站设计策划方案wordpress 移动导航呼出

一、网络加密的方式及实现 1、常见的加密算法 常见的密钥加密算法类型大体可以分为三类:对称加密、非对称加密、单向加密。 对称加密算法采用单密钥加密,在通信过程中,数据发送方将原始数据分割成固定大小的块,经过密钥和加密算法逐个加密…

网站个人备案 企业备案提供手机网站制作哪家好

nvm安装后nvm -v有效,node指令无效 环境变量配置无问题 推荐方案 下载你需要的node版本 Index of /dist/ (nodejs.org) 下载后解压到你的nvm存储版本的位置 cmd进入切换你的使用版本(此时你的nodejs是从网上下载的,npm文件是存在的&…

江门 网站设计wordpress添加留言板

3月25日vim相关操作 题目1: 1)将/etc/hosts网络配置文件复制到/tmp/mydir下; 2)使用vim编辑器打开hosts文件,按i进入编辑模式,将本机IP地址和主机名(client1)映射。 3)按下esc键回到命令模式…

matter 协议的架构;

Matter 协议栈分为多个层级: 应用层:定义设备的业务逻辑(如门锁、灯光控制等)。 数据模型层:通过“集群(Cluster)”组织属性、命令和事件,确保不同厂商设备的互操作性。 交互模型层:定义客户端与服务端之间的…

matter 协议解析;

Matter 协议(原名 Project CHIP,Connected Home over IP)是由 Connectivity Standards Alliance (CSA) 推出的开源应用层标准,旨在为智能家居设备、移动应用和云服务之间提供统一的通信协议,实现不同厂商 IoT 设备…

相机标定(Camera Calibration)原理及步骤:从 “像素模糊” 到 “毫米精准” 的关键一步 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Nordic 的支持对Matter 协议的支持;

Nordic Semiconductor 提供全面的 Matter 解决方案,支持 nRF54LM20A、nRF54L15、nRF54L10、nRF52840、nRF5340 等 SoC,结合 nRF Connect SDK,可开发基于 Thread、Bluetooth LE 和 Wi-Fi 的 Matter 设备。Nordic 还为…

常州网站推广多少钱404网站页面进入

前言 看了大量的多源融合室内定位论文,都绕不开卡尔曼滤波和扩展卡尔曼滤波算法。相当经典,但是又缺少代码。 由于计算机专业不学这些算法,因此理解起来难度还有点大。因此业余抽空复现了下,话不多说,直接上代码。 蓝牙和IMU的卡尔曼滤波融合 from filterpy.kalman imp…

广东网站建设专业公司个人主页搭建

软件开发人员是具有创建软件程序的创意和技术技能的专业人员,是一个具有高回报和挑战性的职业选择。如今,软件开发人员几乎在每个行业工作。随着世界变得越来越数字化,越来越需要具有技术背景的人来创建特定的软件应用程序。 如果您考虑做一…

搭建一个网站的流程社区微网站建设方案ppt模板下载

[react] 说说你对Error Boundaries的理解 错误边界是React16新推出的一种错误处理的方式,在v16之前,React的抛错会导致页面显示的错误,v16修改这种方式成了组件如果产生了错误,那么从这个组件到根组件都会因为错误而崩溃掉&#…

企业网站无锡天津制作企业网站

大型语言模型(LLM)的兴起不仅为获取知识和解决问题开辟了新的可能性,而且催生了一些新型智能系统,例如旨在辅助用户完成特定任务的AI Copilot以及旨在自动化和自主执行复杂任务的AI Agent,使得编程、创作等任务变得高效…

优秀网站案例wordpress图片无法居中显示

最近发现好像写这种基础博客的很少,文章大部分都是几年前的,之前对于时间这块都是直接使用day.js 来处理,废话不多说,直接进入正题 const now new Date();//初始值 now.getFullYear()//年 now.getMonth() 1 //月 now.getDate()…

移动网站建设厂家北京商城网站开发

导语:工欲善其事,必先利其器;士欲宣其义,必先读其书。后台开发作为互联网技术领域的掌上明珠,一直都是开发者们的追逐的高峰。本文将从后台开发所涉及到的技术术语出发,基于系统开发、架构设计、网络通信等…

网站制作视频教程下载重庆网站建设培训班

1.前端的操作:对象接收json数据方式:将所需要传的数据转化为json数据,并将这些数据以post方式传到后台的controller层,然后controller层接收json数据,并且是以对象的形式进行接收。这里面是springmvc自动控制将这些数据…

制作手机网站建设北京网站建设 招聘信息

护卫神PHP套件的安装,需要开启“IIS6管理兼容性”, 那么,如何开启IIS7、IIS7.5、IIS8.0的IIS6兼容模式呢? 设置的时候,请参照如下截图: 本文转自黄聪博客园博客,原文链接:http://www…

旅游的网站怎么做网站建设的公司系统规划方案

Navicat Premium 15 Mac是一款数据库管理工具,提供了一个全面的解决方案,用于连接、管理和维护各种数据库系统。以下是Navicat Premium 15 Mac的一些主要功能和特点: 软件下载:Navicat Premium 15 中文版下载 多平台支持&#xff…

nRF54LM20A USB

USB 类型:高速 USB(USBHS) 支持速率: 高速(HS):480 Mbps 全速(FS):12 Mbps 低速(LS):1.5 Mbps 工作模式:仅支持设备模式(Device mode) 端点与通道: 最多支持 16 个双向端点(bidirectional endpoints…

nRF54LM20A GRTC

nRF54LM20A 的 GRTC(Global Real-Time Counter)是一个超低功耗的全局系统定时器,具备以下主要特性: 高分辨率系统定时器:GRTC 的 SYSCOUNTER 具有 1 微秒分辨率,宽度为 52 位,最长可运行 142 年才会溢出。 全功…

2025年10款最佳生产力提效chrome插件推荐,亲测有用

在数字化办公时代,Chrome插件已成为提升工作效率的重要工具。笔者将结合自己的使用,将为您推荐2025年最受欢迎的10款生产力Chrome插件,帮助您打造更高效的浏览器工作环境。 1. Infinity 新标签页 (Pro)插件分类:浏…

Avalonia 学习笔记06. Page Layout(页面布局)

本节课程的目标是根据一个预先设计好的 UI 模型,使用 Avalonia XAML 来构建“设置”页面的结构。我们将重点放在如何使用 Grid 和 StackPanel 等布局控件来正确地放置元素,而将具体的样式(如颜色、字体、边框等)留…