【从零开始】力扣刷题(1)


前言

根据这里的表单开始刷力扣

数组:数组的遍历

485.最大连续的一个数

在这里插入图片描述
用的方法是先将数组转换成字符串,再以0分割,找到最大的字符的长度即是解。比较简单。
在这里插入图片描述

495.提莫攻击

在这里插入图片描述
做了一个小时也没做出来,参照一个题解,写了一下

用的是双指针,用[1,2,3,7] 2范例画图可以想象一下。
记录上一次攻击和最后一次攻击的时间点
如果在中毒时间之内就攻击了就重制最后一次攻击时间点
如果之外,总时间就加上最后一次攻击+持续时间(中毒结束时间点)-上一次攻击(中毒开始时间点)
最后再加上最后一击的中毒时间就结束了。
在这里插入图片描述

414.第三大的数

比较简单,先用集合去重,再排序。
在这里插入图片描述

628.三个数的最大乘积

思路是
如果大于等于6个数时,因为可能有负数的存在,就找出最前面和最后面三个数,然后暴力枚举所有可能性,排列组合一共C6_3种可能,找出最大的。
小于6直接排列组合,找出最大的。
难点是可能有0的出现和负数的出现,,于是直接暴力枚举了。
排列组合的方法,我写的我自己创的

在这里插入图片描述

数组:统计数组中的元素

645.错误的集合

这个一开始想复杂也写复杂了,后来发现,用正确的集合-丢失的集合=丢失数
重复的集合-丢失的集合=重复数。
主要题目没看透,说是从1开始的整数,那我就用了小学学到的公式,正确的集合总和 = (首项加末项)*项数//2 。总和忘了有内置函数sum()
在这里插入图片描述
下面这个写法写的就很简单。道理类似。

在这里插入图片描述

697.数组的度

思路比较笨,仅供参考,主要是先找到数组的度,是多少,然后将nums里和数组的度一样的数存到列表里,比方说[1,2,2,3,1]度是2 ,1和2 一样有两个,存到新的列表里,然后遍历找到nums中的第一个1和最后一个1的nums的切片后的长度,存到新列表里(2也是这样),最后返回最小的那个长度值。
最后速度不容乐观。
在这里插入图片描述
有1个28ms的范例
官方解答:
在这里插入图片描述

先存三个数分别为nums的每个数的个数它第一个位置和最后一个位置。
然后遍历比较找到度,和每个度对应的长度,再比较决出最小的长度。这个速度28ms。
在这里插入图片描述

484.找到所有数组中消失的数组

一开始用两个for查找,超出时间限制了,后来用字典存有{应有的数:个数}
如果个数为0 说明缺少了,再用列表append。
在这里插入图片描述
没有想到集合可以做差集,直接用正确的集合-缺少的集合
在这里插入图片描述
还找到一种思路是这样的
在这里插入图片描述
博主用的c++写的。用python 仿写了一下是这样。
在这里插入图片描述

442.数组中重复的数据

我直接复制了上一个的代码,通过了

在这里插入图片描述
还有一种思路是这样的,
如果有这个数就让该数的变为相反数,如果出现第二次,此时就为负的,存下这个值。假设我们是不少的[1,2,3,4],那么每次执行我都只会进去第一个if,只有一个数出现了两次,才会进入else。

在这里插入图片描述

41.缺失的第一个正数

想快一小时没有思路,看了一个题解,想法是这样的,先排序,使k = 1,如果有比k大的数就返回它,如果相等就使k加1。看着很简单,自己却没有想到,最小的正整数就是从1开始的。
在这里插入图片描述

274.H指数

我的思路是先判断他最大的数是否是0,如果是则直接返回0,否则,h等于总共的大于等于h的篇数(靠后的几位),如果列表中第一个值就大于h了就说明是此h,否则继续往后遍历下标。
在这里插入图片描述
看到的范例,先倒序排序,枚举,h类似于下标, 直到值和h相等时(数到最后一个值大于h时),说明有h个论文被发表h次。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值