TLP-Task09学习笔记

这篇博客介绍了如何使用Python解决LeetCode中的三道算法题:合并两个有序数组、生成格雷编码以及计算二叉树的最大深度。文章提供了详细的思路解析和代码实现,包括双指针法、位操作符在格雷编码中的应用以及递归求解二叉树深度。同时,文章还补充了位操作符的相关知识。


本篇为Datawhale组队学习计划第21期LeetCode精选题目组Task09学习笔记。
初学,时间有点仓促,很多解法没有详细分析,未来可能会修改,见谅。
Datawhale学习文档:
https://github.com/datawhalechina/team-learning-program/tree/master/LeetCodeTencent

088 合并两个有序数组

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-sorted-array

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

示例:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]

思路

参考官方题解(评论区第一条戳中笑点hhh)
看到有序,那就二分法,考虑双指针法,在不确定中试探比较大小。注意题目要求合并到nums1中。
指针分别放在nums1和nums2数组开头,比较最小值后将其放入输出数组中。
官解的图:
优化前优化:若数组从开头开始修改,为避免影响后续数据,nums1的数据需要提前存放(也就相当于新建了一个数组)。改为直接从末尾修改,节省一些空间。
优化后

Python实现

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        p1 = m - 1      # p1,p2分别指向两个数组的末尾
        p2 = n - 1
        p = m + n - 1   # 从末尾开始从小到大填入元素
        
        while p1 >= 0 and p2 >= 0:
            if nums1[p1] < nums2[p2]:
                nums1[p] = nums2[p2]
                p2 -= 1
            else:
                nums1[p] =  nums1[p1]
                p1 -= 1
            p -= 1

        nums1[:p2 + 1] = nums2[:p2 + 1]	# 合并
        

089 格雷编码

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/gray-code

格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异
给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种
格雷编码序列必须以 0 开头。

示例:

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

输入: 0
输出: [0]

解释:
00 - 0
01 - 1
11 - 3
10 - 2
对于给定的 n,其格雷编码序列并不唯一
例如,[0,2,3,1] 也是一个有效的格雷编码序列。
00 - 0
10 - 2
11 - 3
01 - 1

此外我们定义格雷编码序列必须以 0 开头
给定编码总位数为 n 的格雷编码序列,其长度为 2n。当 n = 0 时,长度为 20 = 1。
因此,当 n = 0 时,其格雷编码序列为 [0]。

思路

Python实现

(代码比较麻烦但是个人觉得蛮好理解,位操作符知识见文末)

class Solution:
    def grayCode(self, n: int) -> List[int]:
        res = []
        size = 1 << n   # 位运算符,二进制下,从右侧推入零来推动最左边的位。
        for i in range(size):
            res.append((i >> 1) ^ i)
        return res
        

104 二叉树的最大深度

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree

给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。

示例:

给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7

返回它的最大深度 3 。

思路

官方题解给出递归与广度优先搜索两种方法(其实还有深度优先等等)。

Python实现

递归比较简单(代码开头给出了二叉树的定义)

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if root is None: 
            return 0 
        else: 
            left_height = self.maxDepth(root.left) 
            right_height = self.maxDepth(root.right) 
            return max(left_height, right_height) + 1 

补充知识

位操作符

https://www.runoob.com/python/python-operators.html
https://www.w3school.com.cn/python/python_operators.asp
<<
左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。
如a=60,二进制0011 1100
a << 2 输出结果 240 ,二进制解释: 1111 0000
<<=
赋值运算符,x<<=3,即为x=x<<3

利用这两个算符可以比较方便地进行二进制计算。如本文代码中size=1<<n,若n=4,左移4位,从1到了10000,就是16(高位丢弃,低位补0)

内容概要:本文是一份针对2025年中国企业品牌传播环境撰写的《全网媒体发稿白皮书》,聚焦企业媒体发稿的策略制定、渠道选择与效果评估难题。通过分析当前企业面临的资源分散、内容同质、效果难量化等核心痛点,系统性地介绍了新闻媒体、央媒、地方官媒和自媒体四大渠道的特点与适用场景,并深度融合“传声港”AI驱动的新媒体平台能力,提出“策略+工具+落地”的一体化解决方案。白皮书详细阐述了传声港在资源整合、AI智能匹配、舆情监测、合规审核及全链路效果追踪方面的技术优势,构建了涵盖曝光、互动、转化与品牌影响力的多维评估体系,并通过快消、科技、零售等行业的实战案例验证其有效性。最后,提出了按企业发展阶段和营销节点定制的媒体组合策略,强调本土化传播与政府关系协同的重要性,助力企业实现品牌声量与实际转化的双重增长。; 适合人群:企业市场部负责人、品牌方管理者、公关传播从业者及从事数字营销的相关人员,尤其适用于初创期至成熟期不同发展阶段的企业决策者。; 使用场景及目标:①帮助企业科学制定媒体发稿策略,优化预算分配;②解决渠道对接繁琐、投放不精准、效果不可衡量等问题;③指导企业在重大营销节点(如春节、双11)开展高效传播;④提升品牌权威性、区域渗透力与危机应对能力; 阅读建议:建议结合自身企业所处阶段和发展目标,参考文中提供的“传声港服务组合”与“预算分配建议”进行策略匹配,同时重视AI工具在投放、监测与优化中的实际应用,定期复盘数据以实现持续迭代。
先展示下效果 https://pan.quark.cn/s/987bb7a43dd9 VeighNa - By Traders, For Traders, AI-Powered. Want to read this in english ? Go here VeighNa是一套基于Python的开源量化交易系统开发框架,在开源社区持续不断的贡献下一步步成长为多功能量化交易平台,自发布以来已经积累了众多来自金融机构或相关领域的用户,包括私募基金、证券公司、期货公司等。 在使用VeighNa进行二次开发(策略、模块等)的过程中有任何疑问,请查看VeighNa项目文档,如果无法解决请前往官方社区论坛的【提问求助】板块寻求帮助,也欢迎在【经验分享】板块分享你的使用心得! 想要获取更多关于VeighNa的资讯信息? 请扫描下方二维码添加小助手加入【VeighNa社区交流微信群】: AI-Powered VeighNa发布十周年之际正式推出4.0版本,重磅新增面向AI量化策略的vnpy.alpha模块,为专业量化交易员提供一站式多因子机器学习(ML)策略开发、投研和实盘交易解决方案: :bar_chart: dataset:因子特征工程 * 专为ML算法训练优化设计,支持高效批量特征计算与处理 * 内置丰富的因子特征表达式计算引擎,实现快速一键生成训练数据 * Alpha 158:源于微软Qlib项目的股票市场特征集合,涵盖K线形态、价格趋势、时序波动等多维度量化因子 :bulb: model:预测模型训练 * 提供标准化的ML模型开发模板,大幅简化模型构建与训练流程 * 统一API接口设计,支持无缝切换不同算法进行性能对比测试 * 集成多种主流机器学习算法: * Lass...
【顶级EI完整复现】【DRCC】考虑N-1准则的分布鲁棒机会约束低碳经济调度(Matlab代码实现)内容概要:本文介绍了名为《【顶级EI完整复现】【DRCC】考虑N-1准则的分布鲁棒机会约束低碳经济调度(Matlab代码实现)》的技术文档,重点围绕电力系统中低碳经济调度问题展开,结合分布鲁棒优化(Distributionally Robust Optimization, DRO)与机会约束规划(Chance-Constrained Programming, CCP),引入N-1安全准则以提升系统在元件故障情况下的可靠性。该方法在不确定性环境下(如风电出力波动)保障调度方案的可行性与经济性,同时降低碳排放。文档提供了完整的Matlab代码实现,便于科研人员复现实验结果,适用于高水平学术研究与工程应用验证。; 适合人群:具备电力系统优化、运筹学及不确定性建模背景的研究生、科研人员及电力行业工程师,熟悉Matlab编程与优化工具箱(如YALMIP、CPLEX/Gurobi)者更佳;适合从事智能电网、低碳调度、鲁棒优化方向的研究者; 使用场景及目标:①复现顶级EI期刊论文中的分布鲁棒机会约束模型;②研究N-1安全准则在低碳经济调度中的集成方法;③掌握分布鲁棒优化在电力系统不确定性处理中的建模技巧;④为微电网、综合能源系统等场景下的可靠、低碳调度提供算法支撑; 阅读建议:建议结合文档中提供的网盘资源(含YALMIP-develop等工具包)进行代码调试与实验验证,重点关注不确定性建模、机会约束转化、鲁棒优化求解流程,并可进一步扩展至多能源协同、需求响应等复杂场景。
【23年新算法】基于鱼鹰算法OOA-Transformer-BiLSTM多特征分类预测附Matlab代码 (多输入单输出)(Matlab代码实现)内容概要:本文介绍了一种基于鱼鹰优化算法(OOA)优化Transformer-BiLSTM模型的多特征分类预测方法,适用于多输入单输出的预测场景,并提供了完整的Matlab代码实现。该方法融合了新型元启发式优化算法OOA与深度学习结构Transformer和BiLSTM,旨在提升分类与预测精度,尤其在处理复杂非线性时序数据方面表现出较强能力。文档还列举了大量相关科研方向与技术应用案例,涵盖机器学习、深度学习、路径规划、电力系统优化等多个领域,突出其在科研仿真与工程实践中的广泛应用价值。; 适合人群:具备一定Matlab编程基础,从事科研或工程应用的研究生、科研人员及算法开发工程师,尤其是关注智能优化算法与深度学习融合应用的技术人员。; 使用场景及目标:①应用于时间序列分类与预测任务,如能源负荷预测、设备故障诊断、信号识别等;②为科研人员提供新算法复现与模型优化的技术参考,推动智能算法在实际系统中的落地;③促进OOA等新兴优化算法与主流神经网络架构的结合研究。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注OOA算法对模型超参数的优化过程以及Transformer-BiLSTM的特征提取机制,同时可参照文中其他案例拓展应用场景,提升综合建模能力。
【VSG 并网空载仿真】虚拟同步发电机并网空载仿真,包含有功-无功功率环与电压-电流双闭环研究(Matlab代码实现)内容概要:本文档介绍了基于Matlab/Simulink实现的虚拟同步发电机(VSG)并网空载仿真研究,重点涵盖有功-无功功率环控制与电压-电流双闭环控制系统的设计与实现。通过构建VSG的数学模型,模拟其在并网空载条件下的动态响应特性,深入分析了VSG的控制策略及其对电网稳定性的影响。同时,文档还涉及下垂控制与虚拟同步机两种grid-forming控制方式的性能对比,旨在为新能源并网系统提供更加稳定可靠的控制解决方案。配套代码可用于复现实验结果,便于进一步研究与优化。; 适合人群:具备电力系统基础知识和Matlab/Simulink仿真能力的高校研究生、科研人员及从事新能源并网技术开发的工程技术人员。; 使用场景及目标:① 掌握虚拟同步发电机的基本原理与建模方法;② 学习并实现有功-无功功率解耦控制与电压-电流双闭环控制策略;③ 对比分析下垂控制与VSG控制在并网稳定性方面的差异;④ 支持相关课题的仿真验证与论文复现。; 阅读建议:建议读者结合Matlab代码逐步运行仿真模型,理解各模块参数设置及其对系统动态性能的影响,重点关注控制器设计逻辑与仿真结果分析,以提升实际动手能力和科研创新能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值