# 代码随想录二刷(哈希表)

news/2024/9/21 4:38:18/文章来源:https://www.cnblogs.com/bathwind/p/18335584

代码随想录二刷(哈希表)

三数之和思路反正对于我来说是真的难想出来。
在这里插入图片描述
若这道题还是采用哈希表的思路去做,非常麻烦,并且还要考虑去重的操作。所以这道题其实用双指针,是更方便的。
在这里插入图片描述
具体程序如下:

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:result = []nums.sort()for i in range(len(nums)):if nums[i] > 0:return resultif i > 0 and nums[i] == nums[i-1]:continueleft = i + 1right = len(nums) - 1while right > left:sum = nums[i] + nums[left] + nums[right]if sum > 0:right -= 1elif sum < 0:left += 1else:result.append([nums[i],nums[left],nums[right]])while right > left and nums[right] == nums[right-1]:right -= 1while right > left and nums[left] == nums[left+1]:left += 1right -= 1left += 1return result

下面来看下四数之和:
在这里插入图片描述
四数之和相当于三数之和升级了一下,并且target不是0了。按照三数之和的思路,再加一个变量作为外层循环。组合出来四个数即可。

class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:result = []n = len(nums)nums.sort()for i in range(n):if nums[i] > target and target > 0:break if i > 0 and nums[i] == nums[i-1]:continuefor j in range(i+1,n):if (nums[i] + nums[j]) > target and target > 0:break if j > i + 1 and nums[j] == nums[j-1]:continueleft = j + 1right = n - 1while right > left:sum = nums[i] + nums[j] + nums[left] + nums[right]if sum > target:right -= 1elif sum < target:left += 1else:result.append([nums[i],nums[j],nums[left],nums[right]])while right > left and nums[right] == nums[right-1]:right -= 1while right > left and nums[left] == nums[left+1]:left += 1right -= 1left += 1return result

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

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

相关文章

ctfshow-web入门-nodejs系列

web334 下载源码后缀改为zip打开即可 先对源码经行一个简单的分析 login.js// 引入Express框架 var express = require(express);// 创建一个路由实例 var router = express.Router();// 引入用户数据,假设user模块导出的是一个包含用户项的对象 var users = require(../modul…

2021年我因为Tab Session Manager丢失数据,好像是研究过一次leveldb的查看/解码方式 但是当时好像因为时间关系没能成功 / chrome .ldb文件

Default\Local Storage\leveldb .ldb2023年下半年我因为chatmindai修改域名,又研究过一次,因为时间关系也没有细究最近,我想查看一下anki的devtool的Local Storage,即https://ankiweb.net/shared/info/31746032这个插件产生的 C:\Users\xxx\AppData\Local\Anki\QtWebEngine…

联合省选 2024 Day2T1 迷宫守卫 题解

联合省选 2024 Day2T1 迷宫守卫 题解 好像距离联合省选已经半年了,前两天看到这题才想起来改,距离分班已经半年了,也算是好好学了半年了,但是还是那么菜,有点绷不住,感觉不如文化课 后来翻到题解区第二篇题解才知道自己赛时想的反悔贪心其实是正解,但是当时啥也不会,主…

小白程序员也要对世界进行第一次的呐喊!

身为程序员对世界的第一声呐喊——Hello World!新建一个文件夹 新建一个目录,并将其命名为Hello.java(关键一步)注意!文件类型显示的是java文件才成功 (文件的后缀要改为java)双击文件,开始编写(本人使用的是Notepad++进行编写) 输入图片中的代码(全部要用英文输入法…

Django模板、模版语言和静态文件

1. templates模板(html)在app目录下创建一个templates目录,用于存放网页模板利用url返回网页点击查看代码 def user_list(request):return render(request,"user_list.html");输入url地址时,会去app目录下的templates目录下寻找名为user_list的HTML文件(根据app…

Cuberite——低配mc服务器的最佳选择

最近白嫖了一个1h1g的服务器,想拿它来开mc服务器,正当我用mcsmanager开服的时候,突然给我报了一条OutOfMemoryError下面就给大家介绍一下Cubreite Cuberite Cuberite is a Minecraft-compatible multiplayer game server that is written in C++ and designed to be efficie…

一图看懂Git、HTTPS、Docker、k8s和微服务

一图看懂Git、HTTPS、Docker、k8s和微服务

全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函数的使用

在Python中,断言是一种常用的调试工具,它允许程序员编写一条检查某个条件。本文主要介绍了断言的应用场景和特点以及assert语句的使用,同时介绍了防御性编程和help()函数。全网最适合入门的面向对象编程教程:29 类和对象的 Python 实现-断言与防御性编程和 help 函数的使用…

《NET CLR via C#》---第四章(System.Object,类型转换,is和as,命名空间和程序集,运行时的相互关系)

System.Object CLR要求每个类型最终都从System.Object类型派生。由于所有类型最终都从System.Object派生,所以每个类型的每个对象都保证了一组最基本的方法。公共方法 说明Equals 如果两个对象具有相同的值,就返回trueGetHashCode 返回对象的值的哈希码。如果某个类型的对象要…

笔记:从Aurora 8b/10b 到Aurora 64b/66b (一):64b/66b 基本知识

参考搬运: https://mp.weixin.qq.com/s/ZSNyjpZpimjyxyO9riIRNQ Aurora 64B/66B (xilinx.com) https://docs.amd.com/r/en-US/pg074-aurora-64b66b 8/10:SATA SRIO 64/66:10G以太网 值得注意: 64b/66b 编码在多LANE模式下,EOF(T)仅在一个LANE上出现; 介绍 8B10B的开销比较…