LeetCode第73场双周赛复盘【神策数据】

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


第一题:数组中紧跟 key 之后出现最频繁的数字


数组中紧跟 key 之后出现最频繁的数字

题目:

给你一个下标从 0 开始的整数数组 nums ,同时给你一个整数 key ,它在 nums 出现过。

统计 在 nums 数组中紧跟着 key 后面出现的不同整数 target 的出现次数。换言之,target 的出现次数为满足以下条件的 i 的数目:

0 <= i <= n - 2 nums[i] == key 且 nums[i + 1] == target

请你返回出现 最多 次数的 target 。测试数据保证出现次数最多的 target 是唯一的。

示例:

输入:nums = [1,100,200,1,100], key = 1

输出:100

解释:对于 target = 100 ,在下标 1 和 4 处出现过 2 次,且都紧跟着 key 。

没有其他整数在 key 后面紧跟着出现,所以我们返回 100 。

思路:

本题是首先把数组中的每一个key后面的数都找出来,然后放在一个数组里面,最后通过判断里面数的多少来进行返回。

本题是一个很容易的签到题,大家应该都可以a出来的。我就不多说了直接看代码吧。

代码:

class Solution:

def mostFrequent(self, nums: List[int], key: int) -> int:

res = []

try:

while nums:

res.append(nums[nums.index(key) + 1])

nums[:] =nums[nums.index(key) + 1:]

except:

z = 0

m = 0

for index,i in enumerate(res):

if res.count(i) > m:

m = res.count(i)

z = index

return res[z]


第二题:将杂乱无章的数字排序


将杂乱无章的数字排序

给你一个下标从 0 开始的整数数组 mapping,它表示一个十进制数的映射规则,mapping[i] = j表示这个规则下将数位i映射为数位j

一个整数 映射后的值 为将原数字每一个数位 i (0 <= i <= 9)映射为 mapping[i]

另外给你一个整数数组 nums ,请你将数组 nums中每个数按照它们映射后对应数字非递减顺序排序后返回。

注意:

如果两个数字映射后对应的数字大小相同,则将它们按照输入中的 相对顺序 排序。

nums 中的元素只有在排序的时候需要按照映射后的值进行比较,返回的值应该是输入的元素本身。

示例 1:

输入:mapping = [8,9,4,0,2,1,3,5,7,6], nums = [991,338,38]

输出:[338,38,991]

解释:

将数字 991 按照如下规则映射:

mapping[9] = 6 ,所有数位 9 都会变成 6 。

mapping[1] = 9 ,所有数位 1 都会变成 8 。

所以,991 映射的值为 669 。

338 映射为 007 ,去掉前导 0 后得到 7 。

38 映射为 07 ,去掉前导 0 后得到 7 。

由于 338 和 38 映射后的值相同,所以它们的前后顺序保留原数组中的相对位置关系,338 在 38 的前面。

所以,排序后的数组为 [338,38,991] 。

思路:

由题我们能大概的知道这个一个映射关系,所以一般我们会想到使用hash表来进行一个映射关系。但是,如果我们是用了hash就会导致数据的丢失(因为题目没有说给的数组里面的数是否不重复,而hash只能有一个键。如果有重复的数据则会导致后面的数据覆盖前面的映射关系,从而导致数据的一个丢失关系。本人亲测5555…)。

所以我们可以使用一个新的和nums等长的数组对nums里面的每一个数据经行一个映射关系。所以就需要使用我们的map函数。如果不知道Python中map怎么使用的,建议可以去复习一下哦!!!

代码:

class Solution:

def sortJumbled(self, mapping, nums):

#设一个函数将每个元素和每个元素的对应值放在一个元组里面!

def add(x,y):

return x,y

#新的数组用来记录nums里面每一个元素的映射值。

res1 = []

#对nums进行一个循环,并合成映射值

for i in nums:

res = “”

for j in list(str(i)):

res += str(mapping[int(j)])

#把每个元素的映射值放到新数组中。

res1.append(int(res))

#让nums的每个元素和新的映射值对应,并返回一个元组类型的列表。

a = list(map(add,res1 ,nums))

#用映射值的大小对新数组排序

c = sorted(a , key = lambda i:i[0])

#最后返回新的数组

return [i[1] for i in c]


第三题:有向无环图中一个节点的所有祖先


有向无环图中一个节点的所有祖先

题目:

给你一个正整数 n,它表示一个 有向无环图 中节点的数目,节点编号为 0n - 1 (包括两者)

给你一个二维整数数组 edges ,其中 edges[i] = [fromi, toi] 表示图中一条从 fromitoi的单向边。

请你返回一个数组 answer,其中 answer[i]是第 i个节点的所有 祖先 ,这些祖先节点 升序 排序。

如果u 通过一系列边,能够到达v,那么我们称节点 u 是节点v的 祖先 节点。

示例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ENU7WZoq-1646669701715)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20220307235246009.png)]

输入:n = 8, edgeList = [[0,3],[0,4],[1,3],[2,4],[2,7],[3,5],[3,6],[3,7],[4,6]]

输出:[[],[],[],[0,1],[0,2],[0,1,3],[0,1,2,3,4],[0,1,2,3]]

解释:

上图为输入所对应的图。

  • 节点 0 ,1 和 2 没有任何祖先。
  • 节点 3 有 2 个祖先 0 和 1 。
  • 节点 4 有 2 个祖先 0 和 2 。
  • 节点 5 有 3 个祖先 0 ,1 和 3 。
  • 节点 6 有 5 个祖先 0 ,1 ,2 ,3 和 4 。
  • 节点 7 有 4 个祖先 0 ,1 ,2 和 3 。

思路:

本题是一个比较经典的bfs所以我们需要用到队列对子节点和孙子节点进行一个判断。首先我们是把所有从1 - n-1的子节点都统一到一起。

  • 题目要求是输出节点的所有祖先节点且有序。既然我们可以获取该节点的所有子节点,那么对于所有的子节点而言,该节点就是祖先节点之一。

  • 为了保证结果有序,就从节点0开始,BFS查询其子节点,记录子节点的祖先节点,直到节点n-1。

代码:

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值