21届智能车雁过留痕备战指南|龙邱科技STC+神眼摄像头处理 高效搜线算法思路分享

21届智能车雁过留痕备战指南|龙邱科技STC+神眼摄像头处理 高效搜线算法思路分享

今年STC单片机首次增设摄像头组别,相信不少备战的同学想要知道这颗新U是否能够快速上手并能够像传统摄像头组别一样,高效完成图像处理,提高车模控制系统上限。

其中最突出的痛点的是:有同学搭建完核心算法组合后,可能感觉到略微卡顿或系统延迟,影响车模调试上限,我们第一次搭建完经过测试单帧处理耗时高达20多ms,这导致车辆运行稳定性和反应速度受限、甚至可能有冲出赛道的情况发生,导致调试陷入瓶颈,提速困难,短时间内难以找到有效突破方向。

针对这一高频痛点,我们结合备战同学的实际调试场景,经过反复测试、迭代优化,整理出一套实用性极强的帧率优化思路,实测验证有效,优化后单帧处理耗时可稳定降至9-11ms,彻底解决卡顿难题,这里将图像处理和以西优化思路分享给大家,希望能够帮助到更多的同学!

实测数据对比,直观呈现优化效果

图像处理方案单帧采集+处理耗时
未优化(采集+处理)20ms-25ms(能感觉到慢,上限较低)
优化后(采集+处理)9ms-11ms(流畅稳定,提高了上限)

同学们遇到的卡顿问题,核心症结主要集中在两点:一是内存资源不足,二是算法计算耗时过长。在拆解具体优化方法前,我们先补充基础知识点,帮助大家吃透核心原理、少走弯路——首先明确,摄像头获取到的图像为灰度图,后续的二值化、赛道识别均基于灰度图展开。

基础铺垫:灰度图、二值化与大津法核心解析

1. 灰度图:摄像头采集的核心图像格式

摄像头拍摄到的图像并非我们日常所见的彩色图,而是灰度图——这类图像仅包含明暗信息,不包含色彩信息,每个像素点的明暗程度用灰度值(0-255)表示。其中,灰度值0对应纯黑色,255对应纯白色,介于两者之间的数值则对应不同深浅的灰色,赛道与背景的差异,本质就是灰度值的差异。

2. 二值化:突出赛道特征的关键步骤

由于灰度图包含大量明暗渐变的像素点,直接用于赛道识别会增加计算量,因此需要进行二值化处理——二值化的核心是设定一个固定阈值,将灰度图中所有像素点的灰度值与该阈值对比,灰度值大于阈值的像素设为纯白色(对应赛道区域),小于等于阈值的像素设为纯黑色(对应背景区域),最终将灰度图转化为仅含黑白两色的二值图,清晰区分赛道与背景,为后续搜线算法简化计算。

为了让大家更直观理解阈值对二值化效果的影响,我们准备了一份灰度图用不同阈值二值化的结果动图,可清晰看到:不同阈值下,赛道与背景的区分效果差异明显,阈值选择不当会导致赛道轮廓模糊、背景干扰过多,甚至无法识别赛道。

在这里插入图片描述

3. 大津法:自动筛选最优二值化阈值的核心算法(原理详解)

二值化的关键在于阈值选择,手动设定阈值不仅效率低,还会受环境光照影响(光照变化会导致赛道与背景的灰度值差异变化),而大津法(也叫最大类间方差法),正是为解决这一问题而生的自动阈值筛选算法,其核心原理围绕“类间方差最大化”展开,无需手动干预,能适配不同光照场景,也是备战同学最常用的二值化算法。简单来说,大津法的核心逻辑是:通过遍历所有可能的灰度阈值(0-255),计算每个阈值对应的“类间方差”,找到类间方差最大的阈值,即为最优二值化阈值——这是因为类间方差越大,代表赛道(一类像素)与背景(另一类像素)的灰度差异越明显,区分效果越好。

为了让大家更直观地理解大津法的原理及阈值筛选过程,我们同步准备了一张大津法示意图,图中清晰呈现了算法筛选最优阈值的核心逻辑。

在这里插入图片描述


结合示意图,我们进一步拆解大津法原理的三个关键环节,对应图中三个核心部分:

  • 直方图:示意图上方的灰色柱状图,是大津法计算的基础,用于显示该灰度图的灰度分布情况。横轴为灰度值(0-255),纵轴为对应灰度值的像素数量,从直方图中可直观看到,赛道与背景的像素会分别集中在两个不同的灰度区间(这是大津法能生效的前提),我们可通过直方图初步判断赛道与背景的灰度差异范围。
  • 方差曲线:示意图下方的蓝色曲线,是大津法原理的核心体现,代表每个灰度阈值(0-255)对应的类间方差(Between-Class Variance)。类间方差是衡量“赛道类像素”与“背景类像素”灰度差异的核心指标,其计算逻辑是:将图像按当前阈值分为前景(假设为赛道)和背景两类,计算两类像素的灰度均值之差的平方,再结合两类像素的数量占比,最终得到类间方差。曲线的每个点,都对应一个阈值的类间方差结果。
  • 最佳阈值:图中用红圈标记的曲线最大值点,是大津法的最终输出,即为自动筛选的最优二值化阈值。结合大津法“类间方差最大化”的核心原理,这个最大值点对应的阈值,能让赛道与背景的灰度差异达到最大,从而最大程度区分赛道与背景,完美规避手动设定阈值的弊端,也能适配光照变化带来的灰度值波动。

精准优化——针对大津法,破解内存与耗时痛点

了解基础原理后,我们回归核心优化需求。大家常用的188×120分辨率图像,若直接定义两个完整数组,可能会出现内存不够的问题;同时,每帧均遍历全图像素计算阈值,会大幅增加计算耗时,进而导致卡顿现象。

经过多轮测试验证,我们总结出两个实用的优化技巧,二者组合使用可实现效果翻倍,且不影响图像识别精度。

技巧1:图像下采样——平衡效率与精度,降低资源占用

针对大家调试时最常遇到的「内存不够」「单帧处理耗时久」两个问题,我们给出最简单、易操作的下采样实操方法,不用复杂修改代码,具体操作如下:大家常用的图像分辨率是188×120(宽188像素、高120像素),下采样核心就是「隔一行取一行、隔一列取一列」,直接将原图尺寸压缩一半,最终得到94×60分辨率的图像(188÷2=94,120÷2=60),后续仅用这张压缩后的图像,执行大津法阈值计算即可。

为了让大家更直观感受下采样的优化效果,我们结合对比图,将188×120(未优化分辨率)与94×60(下采样后分辨率)的核心关键数据,清晰拆解如下,每一组数据都能直接体现下采样的优势,大家一看就懂、一用就会:

首先来看下采样后的94×60分辨率(优化后),其核心数据如下:分辨率为94×60,对应大津法计算阈值时需遍历的直方图操作数仅为5640次,最终计算出的最优阈值为62;

再对比我们常用的、未优化的188×120分辨率:其分辨率为188×120,直方图操作数高达22560次,刚好是94×60分辨率的4倍(标注为x4),而最终计算出的最优阈值为61。

单看这两组数据,就能清晰发现下采样后的图片阈值几乎一样,但是计算量小了4倍!

在这里插入图片描述

技巧2:帧间采样——依托场景特性,大幅缩减重复计算

结合大家实际调试的赛道行驶场景不难发现,环境光照的变化具有明显连续性,不会出现突变情况,这就意味着,相邻两帧图像的最优二值化阈值差异极小,完全无需每帧都重复执行完整的大津法阈值计算,可通过“复用阈值”减少冗余操作。

基于这一核心特性,我们为大家整理了简单易落地的“计算帧+继承帧”循环优化模式:每10-20帧(可根据自身赛道的光照情况、赛道复杂度,灵活调整N值),执行一次完整的大津法阈值计算(即“计算帧”);其余中间帧无需重复计算,直接复用上一计算帧得出的最优阈值(即“继承帧”)。

这一优化策略效果十分显著,可将大津法的计算负载降低90%以上,有效为车辆控制等其他核心算法腾出更多CPU运行时间,进一步提升系统帧率的稳定性,让车辆运行更流畅,助力大家高效完成调试。

最优优化组合:下采样+帧间采样,双重赋能,彻底破局卡顿

结合前文两种优化技巧的核心优势,我们强烈推荐大家将二者搭配使用,实现内存占用与计算耗时的双重减负、双重提升,实操简单且不影响识别精度:建议大家始终在下采样后的94×60分辨率图像上执行大津法阈值计算,同时搭配每10帧(示例值,可根据自身赛道光照、复杂度灵活调整)计算一次阈值的帧间采样模式,兼顾便捷性与优化效果。

两种技巧组合后的预估优化效果十分显著:内存占用可稳定降至原来的1/4,彻底规避内存不够的问题;计算量直接缩减至原来的1/40,大幅降低CPU负载,调试中的卡顿难题可彻底根治,同时系统帧率稳定性会得到显著提升,帮助大家节省调试时间、高效推进备战进度,轻松突破帧率瓶颈。


两种常用搜线算法实测对比

解决大津法优化问题后,搜线算法的合理选型也能进一步提升系统效率,帮助同学们少走弯路。以下为两种常用搜线算法的实测对比,供大家结合自身基础和赛道场景参考选择。

① 八邻域搜线法——隧道摸墙,精准追踪赛道边界

八邻域搜线的原理其实特别好理解,我们用一个生活化的类比就能吃透:想象自己身处一条漆黑的隧道中,看不到前方的路,想要顺利走出隧道,最稳妥的方法就是双手摸着隧道的一侧墙壁,顺着墙壁的轮廓一步步向前走——八邻域搜线,本质就是让程序“摸”着赛道的边界,一步步向上追踪,精准找到整条赛道的轮廓。

先给大家明确左右边界的核心搜线流程,记准这个流程,再看示意图会更易理解:

  • 左边界:采用逆时针搜索,顺序固定:先搜当前像素的右边 → 再搜右上角 → 接着搜上面 → 然后搜左上角 → 最后搜左边,搜到边界点后就停止,不再继续排查其他方向;
  • 右边界:采用顺时针搜索(与左边界方向相反),按照对应对称顺序排查相邻像素,同样搜到边界点后停止,确保始终贴合赛道边缘追踪。

这张是5×5细节示意图,清晰标注左边界逆时针搜索的每一个步骤,可直观看到程序“摸墙”的具体路径,对照上面的流程就能快速对应上每一步操作:

在这里插入图片描述

核心原理(结合类比+实操步骤):和“隧道摸墙”一样,八邻域搜线核心就是“先找墙、再摸墙走”,具体分为3个简单步骤,对应程序的执行逻辑,没有复杂术语,直白易懂:

  1. 找“墙根”——确定初始边界点:首先在图像的最底部(对应车辆近处的赛道,也是赛道最清晰、最容易定位的位置),从图像中间向左右两边搜索,找到黑白跳变点(黑色对应背景、白色对应赛道),这两个跳变点就是赛道的初始左边界和初始右边界,相当于我们摸到隧道墙壁的第一个触点。
  2. 摸“墙走”——沿边界向上追踪:找到初始边界点后,程序就开始像我们摸隧道墙壁一样,顺着赛道边界向上追踪,每一步都会仔细检查当前像素的相邻像素(即八邻域范围),精准锁定下一个边界点,确保不偏离赛道轮廓。
  3. 定“方向”——左右边界搜索有讲究:重点注意!左边界和右边界的搜索方向不一样,避免搜线跑偏,结合5×5细节示意图,具体顺序如下(记准这个顺序,调试不踩坑):
  • 左边界:采用逆时针搜索,顺序固定:先搜当前像素的右边 → 再搜右上角 → 接着搜上面 → 然后搜左上角 → 最后搜左边,搜到边界点后就停止,不再继续排查其他方向;
  • 右边界:采用顺时针搜索(与左边界方向相反),按照对应对称顺序排查相邻像素,同样搜到边界点后停止,确保始终贴合赛道边缘追踪。

结合上述搜线原理与流程,我们来看94×60分辨率图像的八邻域搜线整体效果图,直观感受实际调试中的搜线效果:

在这里插入图片描述

上图清晰呈现了八邻域搜线在实际优化后图像中的完整追踪效果:程序从图像底部的初始边界点出发,沿着赛道左右两侧边界,一步步向上追踪至图像顶部,形成完整的赛道边界轨迹。结合前文的5×5细节示意图,大家可以快速对应“左边界逆时针、右边界顺时针”的搜索逻辑,调试时若出现搜线偏移、中断等问题,也可对照此图快速排查异常。

调试注意事项(重点提醒):虽然原理易懂,但调试时需重点注意2点,避免出现搜线中断、边界偏移的问题:

  1. 严格记准搜索方向:左边界逆时针(右→右上角→上面→左上角→左边)、右边界顺时针,方向记错是搜线跑偏的主要原因,可对照5×5细节示意图反复核对;
  2. 做好断点续接:若遇到赛道边界有轻微断点(如光照影响导致的短暂模糊),可在程序中添加简单的断点续接逻辑,避免程序“摸丢墙”,确保搜线连续不中断。

② 最长白列搜线法——逻辑简洁,新手易上手(完整算法详解)

最长白列搜线法的核心逻辑简单易懂,无需复杂的邻域判断,全程步骤清晰、可操作性强,非常适合刚接触摄像头调试的新手,完整算法流程拆解如下,每一步都直白好记,配合演示视频观看,能快速吃透:

第一步:统计每列连续白点个数,生成分布直方数据。操作非常简单,从图像的最下方一列开始,逐列向上寻找白色像素点(二值化后对应赛道区域),同时同步计数;一旦遇到黑色像素点(对应背景区域),就立即停止该列的计数。按照这个方法,遍历完所有列后,我们就能得到每一列连续白点的个数,形成完整的分布直方数据,为后续找边界奠定基础。

第二步:定位左、右最长白列,确定搜索截止行。这一步是算法的核心,具体操作分为两步:一是从图像左侧到右侧,逐列查找连续白点数量最多的一列,即为「左最长白列」;二是从图像右侧到左侧,同样逐列查找连续白点数量最多的一列,即为「右最长白列」。

第三步:精准查找赛道左右边界,处理丢线情况。找到搜索截止行后,我们就可以开始定位赛道边界了,搜索范围固定为「从图像最下一行(对应车辆近处)开始,到搜索截止行结束」,具体边界查找规则如下:

  • 左边界查找:以左最长白列为起点,向左逐像素排查,找到「黑黑白」的像素组合(即前两个为黑色、第三个为白色),此时这个白色像素点,就是赛道的左边界;
  • 右边界查找:以右最长白列为起点,向右逐像素排查,找到「白黑黑」的像素组合(即前两个为白色、第三个为黑色),此时这个白色像素点,就是赛道的右边界。

补充说明(丢线处理):若沿着上述规则查找,直到扫描到图像的边缘,仍然没有找到对应的「黑黑白」「白黑黑」像素组合,说明出现了丢线情况,此时直接将图像的屏幕边界,当作赛道边界,避免程序因丢线陷入混乱,保证调试稳定性。

为了让大家更直观地掌握整个算法的执行过程,我们还准备了最长白列搜线法的整体流程演示视频,结合视频对照上述步骤,能快速理解每一步的实际操作效果,新手也能快速上手调试。

在这里插入图片描述


核心优势(贴合新手需求):相较于八邻域搜线法,最长白列搜线法的最大优势就是门槛低、易操作。算法逻辑清晰连贯,无需记忆复杂的邻域搜索方向,每一步操作都有明确的规则,代码编写难度低;调试过程直观,可通过查看每列白点计数、最长白列位置,快速排查问题,无需复杂的逻辑判断,非常适合新手快速上手、快速落地。

局限性(客观说明,避坑提示):结合实际调试场景,该算法也存在一定局限性,大家可提前了解、规避问题:一是需要遍历整幅图像的所有列,计算耗时相对固定,无法像八邻域搜线法那样节省计算量;二是在简单直道场景下,会存在一定的冗余计算,运行效率低于八邻域搜线法;三是面对复杂弯道时,由于最长白列长度缩短、视野变近,边界识别精度可能会略有下降,需做好调试适配。

**最长白列优化方案(兼顾效率与易用性):针对上述局限性,我们对最长白列搜线法进行了简单易落地的优化,核心是修改第一步的扫描规则,优化后可大幅提升效率,具体如下:
**优化核心(明确两步扫描规则,避免混淆):优化仅针对前两步的扫描逻辑,分两步明确,后续丢线处理等步骤与未优化版本完全一致,无需额外修改:

  1. 统计白点、找左/右最长白列(第一步):保留“从图像最下方一列开始,逐列向上寻找白点、遇到黑点停止计数”的核心逻辑,扫描规则为隔两列搜一列——即不扫描所有列,每间隔两列,仅对一列进行白点计数,跳过中间两列的扫描,最终定位出左、右最长白列。
  2. 扫线找边界点(第二步):找到左、右最长白列后,向两边扫线寻找“黑黑白”“白黑黑”边界组合时,扫描规则改为隔一列扫一列,且每行都必须完整扫描(不跳过任何一行),确保边界点定位精准,既节省计算量,又不影响识别精度。

优化后实测效果(核心数据):优化后最长白列搜线法的总像素访问量仅为3503次,相较于未优化版本的全列扫描,节省了76%的计算量!,计算耗时大幅降低,冗余计算问题得到有效解决,同时完全不影响边界识别精度,兼顾了新手易用性和调试效率。

为了让大家更直观地体会优化前后的效率差异,我们也准备了对应的演示gif,可清晰看到“隔两列搜一列”的扫描过程,以及优化后像素访问量减少、搜线效率提升的实际效果,结合数据对比,能快速吃透优化逻辑。

在这里插入图片描述

两种算法路径对比,助力合理选型(重点:优先推荐八邻域,最长白列可优化适配新手)

结合前文两种算法的原理、实操及调试场景,同时兼顾最长白列搜线法的新增优化方案,我们从算法耗时、资源占用、适配场景三个核心维度,做详细对比,帮大家快速做出选择——核心结论先明确:从备战调试的效率、稳定性需求出发,优先推荐选择八邻域搜线法;优化后的最长白列搜线法虽大幅提升效率,但仍有局限性,更适合纯新手入门适配,具体对比如下:

对比维度八邻域搜线法最长白列搜线法
算法耗时(核心优势)耗时少、效率高,无需遍历整幅图像,仅沿赛道边界追踪,计算量可控;搭配下采样、帧间采样优化后,耗时可进一步降低,能有效提升帧率,解决卡顿问题,完全适配备战需求。未优化版本耗时固定且偏长,需遍历整幅图像所有列;优化后(隔两列搜一列),总像素访问量节省80%(仅3358次),计算耗时大幅降低,冗余计算问题得到有效改善,但仍需统计部分列的白点个数,整体效率仍低于八邻域搜线法。
资源占用(核心优势)内存占用低,无需存储整幅图像的冗余信息,仅需记录赛道边界点序列,可有效规避内存不足的报错,与前文大津法的内存优化技巧适配度极高,协同优化效果更突出。未优化版本内存占用略高,需存储所有列的白点计数数据;优化后(隔两列搜一列),需存储的计数数据量同步减少,内存占用有所降低,虽不会出现严重内存溢出,但仍需存储部分直方数据,无法像八邻域那样节省资源,与整体优化思路的协同性较弱。
适配场景适配性强,无论是直道、复杂弯道,还是光照略有变化的场景,都能精准追踪赛道边界,稳定性高;适合有一定调试基础、追求帧率流畅、想突破卡顿瓶颈的同学,也是备战进阶的最优选择。适配场景有限,优化后虽能提升效率,但识别精度未明显提升,仍更适合简单直道场景,面对复杂弯道时,识别精度会下降;仅推荐纯新手入门练习使用,借助优化版本快速熟悉搜线逻辑,入门后建议快速切换为八邻域搜线法,避免影响后续备战进度。
实操难度略高于最长白列,需记准左逆右顺的搜索方向,调试时需注意断点续接,但掌握后可快速落地,后续调试维护更便捷。极低,逻辑简洁、步骤固定,优化后仅修改第一步扫描规则(隔两列搜一列),无需复杂的方向判断,无需额外新增操作,适合纯新手入门,快速熟悉搜线算法的基本逻辑。

补充选型建议:结合备战核心需求(解决卡顿、提升帧率、稳定识别),优先选择八邻域搜线法,其在耗时和资源上的优势能与前文大津法的优化技巧形成协同,彻底解决调试中的核心痛点;若你是纯新手,可借助优化后的最长白列搜线法入门(效率提升、操作简单),快速熟悉搜线逻辑,待掌握基础调试技巧后,建议及时切换为八邻域搜线法,兼顾入门难度与备战效率,避免因算法选型不当影响进度。

龙邱寄语

STC摄像头组的帧率优化,核心在于精准定位痛点、科学简化计算,无需追求过度复杂的操作,抓住“内存优化”“计算量精简”两个关键,就能实现显著的优化效果。

以上优化思路及基础知识点,均基于龙邱科技多次实测及同学们的备战高频痛点总结得出,从基础原理铺垫,到大津法双重优化,再到搜线算法选型,每一步均贴合实际备战场景,兼顾实用性与严谨性,助力大家少踩坑、省时间。

希望这份指南能帮助各位同学突破调试瓶颈,高效解决帧率卡顿问题,稳步推进备战进度。若大家在调试过程中遇到其他疑问,欢迎在评论区留言交流,龙邱科技将持续为各位同学提供技术支持,助力大家顺利备战、突破难关!

(注:个人观点,仅供参考)

Read more

决策树如何一步步“学习规则“

决策树如何一步步“学习规则“

作者:HOS(安全风信子) 日期:2026-01-09 来源平台:GitHub 摘要: 决策树是一种直观易懂的监督学习算法,其核心优势在于能够从数据中自动学习规则,便于人类理解和解释。在安全领域,决策树的这一特性使其成为规则提取、入侵检测、恶意软件分类等场景的重要工具。本文深入探讨了决策树的学习机制,包括特征选择、节点分裂、剪枝策略等关键技术,并结合安全领域的实际案例,展示了决策树如何一步步从数据中学习安全规则。通过分析决策树在安全攻防中的应用,结合实际代码示例和性能对比,本文揭示了决策树作为一种"白盒"模型的独特优势,以及如何优化和扩展决策树以适应复杂的安全场景。 1. 背景动机与当前热点 1.1 为什么决策树在安全领域如此重要? 决策树算法以其独特的规则学习能力和良好的可解释性,在安全领域占据着重要地位。与深度学习等"黑盒"模型不同,决策树能够生成清晰易懂的规则,便于安全分析师理解和验证。在安全领域,这种可解释性至关重要: * 规则提取:决策树可以从大量安全数据中自动提取有效的安全规则,用于入侵检测系统(IDS)和防火墙配置

By Ne0inhk
哈希表完全指南:从入门到刷题实战

哈希表完全指南:从入门到刷题实战

文章目录 * 前置知识要求 * 为什么叫Hash? * 和数组有什么关系? * 数组是怎么组织数据的? * 但如果我知道索引呢? * 矛盾点 * 哈希表的做法 * 对比总结 * 哈希表在代码中长什么样?(Java) * 在 Java 中,哈希表的表现形式为**键值对(Key-Value)** * 键值对是什么? * 底层怎么存的? * 哈希表中常用的方法有哪几个? * 实战:刷LeetCode时怎么用哈希表得到更好的时间复杂度? * 简单题:难度1 * 答案 * 通用小技巧 * 简单题:难度2 * 答案 * 中等题:难度4 * 为什么会有不同的哈希表? * 主要的哈希表种类 * **链表法哈希表(最常见)** * **开放寻址法哈希表** * **布谷鸟哈希(Cuckoo Hashing)** * **一致性哈希(Consistent Hashing)** * 题外话:哈希表的前世今生与永远的更优 * 前世 * 今生 *

By Ne0inhk

傅里叶变换 | FFT 与 DFT 原理及算法

注:本文为 “傅里叶变换 | FFT 与 DFT” 相关合辑。 英文引文,机翻未校。 中文引文,略作重排。 图片清晰度受引文原图所限。 如有内容异常,请看原文。 Fast Fourier Transform (FFT) 快速傅里叶变换(FFT) In this section we present several methods for computing the DFT efficiently. In view of the importance of the DFT in various digital signal processing applications, such as linear filtering,

By Ne0inhk
【C++动态规划 最长公共子序列】1035. 不相交的线|1805

【C++动态规划 最长公共子序列】1035. 不相交的线|1805

本文涉及知识点 C++动态规划 LeetCode1035. 不相交的线 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足: nums1[i] == nums2[j] 且绘制的直线不与任何其他连线(非水平线)相交。 请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。 以这种方法绘制线条,并返回可以绘制的最大连线数。 示例 1: 输入:nums1 = [1,4,2], nums2 = [1,2,4] 输出:2 解释:可以画出两条不交叉的线,如上图所示。 但无法画出第三条不相交的直线,因为从 nums1[

By Ne0inhk