热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

leetcode18四数之和(c++和python)

目录题目描述:解题思路:C代码:python代码:题目描述:给定一个包含n个整数的数组nums和一个目

目录

题目描述:

解题思路: 

C++代码:

python代码:



题目描述:

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 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]
]

解题思路: 

先排序,在定四个索引: a, b, c, d;  其中a, b依次从头到尾开始遍历,c定在b+1,d定在nums.size()-1, 然后c, d慢慢靠拢。如果nums[a] + nums[b] + nums[c] + nums[d] > target,在前面基数a,b固定的情况下,则只能移动d--,才能使和变小,才有可能找到相等的索引,反之如果

C++代码:


执行用时:112 ms, 在所有 C++ 提交中击败了20.99%的用户

内存消耗:12.6 MB, 在所有 C++ 提交中击败了87.95%的用户

class Solution {
public:vector> fourSum(vector& nums, int target) {int len_nums &#61; nums.size();if (len_nums <4) return {};sort(nums.begin(), nums.end());vector> ans;for (int i &#61; 0; i 0 && nums[i] &#61;&#61; nums[i-1]) continue; // 后面的数字和前面的重复了&#xff0c;则直接跳过for (int j &#61; i&#43;1; j i&#43;1 && nums[j] &#61;&#61; nums[j-1]) continue; // 后面的数字和前面的重复了&#xff0c;则直接跳过int L &#61; j&#43;1; // L指向四个数中第三个元素int R &#61; len_nums-1;while (L targetif (nums[i]&#43;nums[j]-target > -(nums[L]&#43;nums[R])) R--; // 大了&#xff0c;则移动右边else if (nums[i]&#43;nums[j]-target <-(nums[L]&#43;nums[R])) L&#43;&#43;; // 小了&#xff0c;则移动左边else{ans.push_back({nums[i], nums[j], nums[L], nums[R]}); // 找到了合适的&#xff0c;如果后面元素重复则跳过while (L };

python代码&#xff1a;


执行用时&#xff1a;476 ms, 在所有 Python 提交中击败了64.67%的用户

内存消耗&#xff1a;13 MB, 在所有 Python 提交中击败了78.96%的用户

class Solution(object):def fourSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[List[int]]"""len_nums &#61; len(nums)if len_nums <4: return []nums.sort() # 有序数组ans &#61; []for i in range(len_nums - 3):if i > 0 and nums[i] &#61;&#61; nums[i-1]: continue # 重复了&#xff0c;则跳过for j in range(i &#43; 1, len_nums - 2):if j > i&#43;1 and nums[j] &#61;&#61; nums[j-1]: continueL &#61; j &#43; 1R &#61; len_nums - 1while L target:R &#61; R - 1elif sum_val


推荐阅读
  • 本文详细介绍了 Redis 中的主要数据类型,包括 String、Hash、List、Set、ZSet、Geo 和 HyperLogLog,并提供了每种类型的基本操作命令和应用场景。 ... [详细]
  • 本文探讨了如何将Python对象转换为字节流,以实现文件保存、数据库存储或网络传输的需求。主要介绍了利用pickle模块进行序列化的具体方法。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • 本文介绍了如何利用OpenCV库进行图像的边缘检测,并通过Canny算法提取图像中的边缘。随后,文章详细说明了如何识别图像中的特定形状(如矩形),并应用四点变换技术对目标区域进行透视校正。 ... [详细]
  • 本文将详细探讨 Python 编程语言中 sys.argv 的使用方法及其重要性。通过实际案例,我们将了解如何在命令行环境中传递参数给 Python 脚本,并分析这些参数是如何被处理和使用的。 ... [详细]
  • 本文深入探讨了WPF框架下的数据验证机制,包括内置验证规则的使用、自定义验证规则的实现方法、错误信息的有效展示策略以及验证时机的选择,旨在帮助开发者构建更加健壮和用户友好的应用程序。 ... [详细]
  • Zabbix自定义监控与邮件告警配置实践
    本文详细介绍了如何在Zabbix中添加自定义监控项目,配置邮件告警功能,并解决测试告警时遇到的邮件不发送问题。 ... [详细]
  • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 本文详细介绍了如何在Spring框架中设置事件发布器、定义事件监听器及响应事件的具体步骤。通过实现ApplicationEventPublisherAware接口来创建事件发布器,利用ApplicationEvent类定义自定义事件,并通过ApplicationListener接口来处理这些事件。 ... [详细]
  • 本文探讨了如何在Python中将具有相同值的元素分组到矩阵中,这是一个在数据分析和处理中常见的需求。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
author-avatar
轰雷帝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有