C C++最全LeetCode第73场双周赛复盘【神策数据】(2),万字C C++技术类校招面试题汇总

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

在这里插入图片描述

文章目录

前言

首先还是来总结一下上周六晚上的双周赛73场的战况。因为上完自习回来就是11:10分左右了,然后回来看见周赛已经过半。说时迟那时快,我立马打开电脑(不知道为什么力扣的周赛题目在手机和iPad都不能打开,这个就是非常的烦需要回寝室来写这个周赛题目)然后上来就没直接做第一题,而是直接a的第二题(感觉easy做多了除了想办法提高其的通过率别的没啥了),在a的过程还是死了一次,然后通过本地编辑器调试最后还是通过了,随着接着a第一题,第一题也是很很快就写出来了。然后看时间还剩10分钟,也就看了看了第三题,一看就知道是bfs方法来进行搜索,但是我的bfs掌握还没dfs一半好,所以就直接洗洗睡了(准备明天的下一场周赛—最奔溃也是最接近一次ak的周赛)。那废话我就不多说了直接看题解吧(一直很稳定,两题选手,复盘一直没看最后一题55555)


第一题:数组中紧跟 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]


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

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

题目:

img
img

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

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

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

不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

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

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

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值