训练营day6-7:数组篇

目录

1、LeetCode :242.有效的字母异位词

2、349. 两个数组的交集

3、202. 快乐数

4、1. 两数之和

5、454. 四数相加 II

6、383. 赎金信

7、15. 三数之和

8、18. 四数之和


1、LeetCode :242.有效的字母异位词

还是比较简单的,直接统计就行

def isAnagram242(s, t):ss={}if len(s)!=len(t):return Falsefor i in range(len(s)):if s[i] in ss:ss[s[i]] = ss[s[i]]+1else:ss[s[i]] = 1for j in range(len(t)):if t[j] in ss and ss[t[j]]>0:ss[t[j]] = ss[t[j]]-1else:return Falsereturn True

2、349. 两个数组的交集

def intersection349( nums1, nums2):nums1 = set(nums1)nums2 = set(nums2)res = []for i in nums1:if i in nums2:res.append(i)return res
def intersection34902( nums1, nums2):res = []for i in nums1:if i in nums2 and i not in res:res.append(i)return res

3、202. 快乐数

 终点是无线循环,会出现重复的数才退出循环

def isHappy202(n):sum=[]while(n!=1):s = 0for i in str(n):s = s+int(i)*int(i)n= sif n in sum:return Falsesum.append(n)return True

4、
1. 两数之和

 第一反应就是排序+双指针,但因为要返回下标,又进行了一次for

def twoSum1( nums, target):numsa = sorted(nums)i =0j = len(numsa)-1while(i<j):if numsa[i]+numsa[j]==target:breakelif numsa[i]+numsa[j]>target:j=j-1else:i = i+1i1 = numsa[i]j1 = numsa[j]s1 = -1s2 = -1for k in range(len(nums)):if nums[k]==i1 and s1==-1 :s1 = kelif nums[k]==j1:s2 = kreturn [s1,s2]

 题解应该是用map,感觉思路差不多,,而已find in 不就又是一次for吗,但时间从52到了48,两层for循环达到了1531ms,看来还是不一样

def twoSum102( nums, target):map = {}for i in range(len(nums)):map[nums[i]] = ifor i in range(len(nums)):tmp = target - nums[i]if tmp in map and map[tmp] != i:return [i, map[tmp]]

5、
454. 四数相加 II

 跟前面有点类似,第一想法就是两两相加,但我写的计算出来怎么怎么慢608ms,题解也很慢548ms,好吧,看来还是c++快吧

def fourSumCount454(nums1, nums2, nums3, nums4):map1 ={}for i in range(len(nums1)):for j in range(len(nums2)):s = nums1[i]+nums2[j]if s in map:map1[s] = map1[s]+1else:map1[s] =1map2 ={}c = 0for i in range(len(nums3)):for j in range(len(nums4)):s = nums3[i]+nums4[j]if -1*s in map1:c = c+map1[-1*s]return c

6、
383. 赎金信

 这种题思路就比较一致,匹配的就直接map查找就行,C++的话数组可能会更快一点

def canConstruct383( ransomNote, magazine):map={}for i in magazine:if i in map:map[i] = map[i]+1else:map[i]=1for i in ransomNote:if i in map and map[i]>0:map[i] = map[i]-1else:return Falsereturn True

7、
15. 三数之和

def threeSum15(nums):nums = sorted(nums)res = []for i in range(len(nums)):if nums[i]>0:breaktmp = -1*nums[i]l = i+1r = len(nums)-1while(l<r):if nums[l] + nums[r] == tmp :if [nums[i], nums[l], nums[r]] not in res:res.append([nums[i],nums[l],nums[r]])l=l+1elif nums[l]+nums[r]>tmp:r = r-1else:l = l+1return res

理论上不需要说啥但是也太慢了,6004ms,一个去重,降到4696ms

            if i>0 and nums[i]==nums[i-1]:continue

 把res里面的去重拿到外面,降到1248ms,只打败了41%的python3用户,剩下的人是怎么做到的

def threeSum1502( nums):nums = sorted(nums)res = []for i in range(len(nums)):if nums[i] > 0:breakif i > 0 and nums[i] == nums[i - 1]:continuetmp = -1 * nums[i]l = i + 1r = len(nums) - 1while (l < r):if nums[l] + nums[r] == tmp:res.append([nums[i], nums[l], nums[r]])if nums[l] + nums[r] > tmp:r = r - 1while (l < r and nums[r] == nums[r + 1]):r = r - 1else:l = l + 1while (l < r and nums[l] == nums[l - 1]):l = l + 1return res

8、
18. 四数之和

四数之和,跟前面三数之和类似,主要是剪枝,和有可能是负数,不能直接比大小,直接上最后的剪完版本772ms

 def fourSum(self, nums: List[int], target: int) -> List[List[int]]:nums = sorted(nums)all=[]for i in range(len(nums)-3):if nums[i]>target and nums[i]>0:breakif i>0 and nums[i]==nums[i-1]:continuefor j in range(i+1,len(nums)):sum = nums[i]+nums[j]if sum>target and nums[j]>0:breakif j>i+1 and nums[j]==nums[j-1]:continuel=j+1r = len(nums)-1while(l<r):if nums[l]+nums[r]==target-sum:res = [nums[i],nums[j],nums[l],nums[r]]#if res not in all:all.append(res)if nums[l]+nums[r]>target-sum:r = r-1while (l < r and nums[r] == nums[r + 1]):r = r - 1else:l=l+1while (l < r and nums[l] == nums[l - 1]):l = l + 1return all

总结:

数组主要是逻辑的东西,好像之前也又做过,还是快的

查找匹配直接上map(python只验证了逻辑,c++应该要考虑结构,数组,集合,映射之类的)

数组很多是双指针

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

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

相关文章

SystemVerilog 第2章:数据类型

在 Verilog中,初学者经常分不清reg和wire两者的区别。应该使用它们中哪一个来驱动端口?连接不同模块时又该如何做? Systemverilog对经典的reg数据类型进行了改进,使得它除了作为一个变量以外,还可以被连续赋值、门单元和模块所驱动。为了与寄存器类型相区别,这种改进的数据类…

Python封装:提升代码质量的秘诀

在面向对象编程&#xff08;OOP&#xff09;中&#xff0c;封装是一种将数据和操作数据的方法绑定在一起的机制&#xff0c;以隐藏内部实现的细节&#xff0c;使代码更简洁、更安全。在Python中&#xff0c;我们通过定义类来实现封装。在本文中&#xff0c;我们将介绍Python封装…

常微分方程建模R包ecode(一)——构建常微分方程系统

常微分方程在诸多研究领域中有着广泛应用&#xff0c;本文希望向大家介绍笔者于近期开发的R包ecode&#xff0c;该包采用简洁易懂的语法帮助大家在R环境中构建常微分方程&#xff0c;并便利地调用R图形接口&#xff0c;研究常微分方程系统的相速矢量场、平衡点、稳定点等解析性…

AI面试官:LINQ和Lambda表达式(三)

AI面试官&#xff1a;LINQ和Lambda表达式&#xff08;三&#xff09; 当面试官面对C#中关于LINQ和Lambda表达式的面试题时&#xff0c;通常会涉及这两个主题的基本概念、用法、实际应用以及与其他相关技术的对比等。以下是一些可能的面试题目&#xff0c;附带简要解答和相关案…

视频内存过大如何压缩变小?这个压缩方法了解一下

在日常生活中&#xff0c;不管是日常随手拍的视频还是在工作中遇到的视频文件&#xff0c;在编辑处理的时候&#xff0c;如果视频的内存过大&#xff0c;不仅会占用很大的内存&#xff0c;在传送的时候也会花费很长时间&#xff0c;这时候将视频给压缩一下就可以很好的解决这一…

Feign远程调用如何携带form url

这是一个需要携带参数在form url上的请求&#xff0c;正常调用方式是这样的 响应&#xff1a; 在Feign中&#xff0c;应该怎么调用呢?? 定义OpenFeignClient接口 FeignClient(value "client-service", url "http://127.0.0.1/api") public interface…

代理模式来啦

一、代理模式 代理模式是我们工作中比较常用的设计模式之一了&#xff0c;主要用于隐藏具体实现类的实现细节或者对实现类的行为进行增强&#xff0c;即对具体实现的前后做些特殊逻辑。 既然说是代理&#xff0c;那就要对客户端隐藏真实实现&#xff0c;由代理来负责客户端的所…

Unity游戏源码分享-3d机器人推箱子游戏

Unity游戏源码分享-3d机器人推箱子游戏 一个非常意思的3D游戏 工程地址&#xff1a;https://download.csdn.net/download/Highning0007/88098014

STM32CUBEMX配置 定时器中断 和 上升沿中断(实现检测1s以内的脉冲个数)

———————————————————————————————————— ⏩ 大家好哇&#xff01;我是小光&#xff0c;嵌入式爱好者&#xff0c;一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子&#xff0c;使用STM32CUBEMX做了很多驱动&#x…

Redis简介、常用命令

目录 一、​​关系数据库​​与非关系型数据库概述 1.1 关系型数据库 1.2 非关系型数据库 二、关系数据库与非关系型数据库区别 2.1 数据存储方式不同 2.2 扩展方式不同 2.3 对事务性的支持不同 三、非关系型数据库产生背景 四、Redis简介 4.1 Redis的单线程模式 4.…

评论管理功能

后端 bp.get("/comment/list") def comment_list():comments CommentModel.query.order_by(CommentModel.create_time.desc()).all()comment_list []for comment in comments:comment_dict comment.to_dict()comment_list.append(comment_dict)return restful.ok…

网络超时导致namenode被kill的定位

交换机升级导致部分网络通信超时, 集群的namenode主从切换后,主namenode进程被杀死。 网络问题导致namenode与zk间的连接超时触发了hadoop集群的防脑裂机制而主动kill掉了超时的namenode进程。 日志分析发现zk和namenode之间的网络连接超时: 超时触发了namenode切换,并将超时…

linux 无桌面运行 GUI 程序(electron、arm)

操作 开发板事先连接好屏幕&#xff0c;并用串口连接开发板 apt install xorg dpkg-reconfigure x11-common # 允许任何用户连接到X11服务器 startx # 会在屏幕启动一个命令行终端将键盘连接到开发板&#xff0c;并在开发板上执行命令运行 GUI 应用即可 ./your_program如果是…

ES6基础知识七:你是怎么理解ES6中 Generator的?使用场景?

一、介绍 Generator 函数是 ES6 提供的一种异步编程解决方案&#xff0c;语法行为与传统函数完全不同 回顾下上文提到的解决异步的手段&#xff1a; 回调函数promise 那么&#xff0c;上文我们提到promsie已经是一种比较流行的解决异步方案&#xff0c;那么为什么还出现Gen…

Flutter中如何取消任务

前言 在开发过程中&#xff0c;取消需求是很常见的&#xff0c;但很容易被忽略。然而&#xff0c;取消需求的好处也很大。例如&#xff0c;在页面中会发送很多请求。如果页面被切走并处于不可见状态&#xff0c;就需要取消未完成的请求任务。如果未及时取消&#xff0c;则可能…

linux系统more基本命令python源码分享

此贴python源码是linux系统more基本命令的实现。 实现linux中more的基本功能&#xff0c;当more后加一个文件名参数时候&#xff0c;分屏显示按空格换页&#xff0c;按回车换行,在左下角显示百分比&#xff1b; 以处理管道参数的输入&#xff0c;处理选项num:从指定行开始显示&…

crawlab爬虫python篇(保姆级图文教程)

文章目录 前言一、创建项目二、创建爬虫1.新建项目2.新建爬虫3. 上传文件总结资料解决方案记录前言 一个python刚到门槛水平的程序员是如何使用crawlab爬取网站,在这里做个图文教程记录下。 提示:这里做一个简单的网站爬取完整示例图文教程 一、创建项目 首先,我们将创建一…

Android平台GB28181设备接入模块之按需编码和双码流编码

技术背景 我们在做执法记录仪或指挥系统的时候&#xff0c;会遇到这样的情况&#xff0c;大多场景下&#xff0c;我们是不需要把设备端的数据&#xff0c;实时传给国标平台端的&#xff0c;默认只需要本地录像留底&#xff0c;如果指挥中心需要查看前端设备实时数据的时候&…

Python实现九宫格数独小游戏

1 问题 有1-9个数字&#xff0c;将他们填入一个3*3的九宫格中&#xff0c;使得他们的每行&#xff0c;每列&#xff0c;以及对角线上的和相等&#xff0c;且要求每个格子的数字不可以重复。使用python列出所有可能的组合。示例如下: 2 方法 每行&#xff0c;列&#xff0c;对角…

临时文档4

Redis有哪些数据类型 Redis主要有5种数据类型&#xff0c;包括String&#xff0c;List&#xff0c;Set&#xff0c;Zset&#xff0c;Hash&#xff0c;满足大部分的使用要求 Redis的应用场景 总结一 计数器 可以对 String 进行自增自减运算&#xff0c;从而实现计数器功能。…