算法笔试模拟题精解之“数组染色”

简介: 可以采用链表的思想,定义一个数组temp来存放每个递增的子串,题目需要求出最少的递增子串有多少个,采取的思路是递增的子串越密集越好。

在线编程介绍

阿里云开发者社区在线编程产品,针对广大开发者学习、实践、面试、应聘、考试认证等打造的免费在线刷题神器。题库来自笔试模拟题、算法大赛模拟题等,界面整洁明了,操作简单,为用户营造专心答题的学习环境。点击链接开始体验:https://developer.aliyun.com/coding

本文为大家介绍其中的 第63题:数组染色 的题目解析,具体如下:

题目描述

等级:中等
知识点:DP、LIS

查看题目:数组染色
codancer现在有一个长度为n的数组a,对于每个这个数组的每个数字,我们必须染上颜色,但是codancer有一个限制条件:如果i<j并且a[i]<a[j],那么a[i]a[j]必须染同一种颜色,否则则染不同的颜色。现在codancer想知道最少几种颜色才能把整个数组染完颜色。
输入一个正整数n和数组a。
(1<=n<=100000,0<=a[i]<=1000000000).
输出最少需要的颜色种类数。
示例1
输入:
5
[2,1,4,5,3]
输出:
2
注意
把a[1],a[3],a[4]染同一种颜色,把a[2]和a[5]染成另外一种颜色。

解题思路

大致思路:可以采用链表的思想,定义一个数组temp来存放每个递增的子串,题目需要求出最少的递增子串有多少个,采取的思路是递增的子串越密集越好,即若有2,4,3,5。那么我最优选择的是密集子串2,3和4,5.而不是2,4和3,5;即使对这个测试用例来说,答案都是一样的,但是就题目而言,密集子串是最优的选择。
具体思路:定义一个数组temp来存放每个递增的子串,那么我先将第一个元素放在temp数组的第一个位置,从i=1开始遍历x数组,将x[i]与temp数组的第一个元素开始比较(j=0),如果x[i]>temp[j],那么我就将x[i]元素链接在temp[j]元素后面,又因为这是个数组,不是链表,而且链接后temp[j]值再也用不上,和链表的最后一个元素比较,因此可以直接覆盖temp[j]元素,即temp[j]=x[i]。我说的链接如下图所示
image.png
可以发现,每次比较都是和链表最后一个元素比较,所以前面的元素可以覆盖,如下面的直接覆盖法,也是用数组实现,很简单。而且还可以发现,temp数组永远是递减的,这样也满足密集子串,因为从上往下走,找到满足的即可停止,不需要继续往下。最终,temp数组有几个元素,答案就是多少。可以用ans一致指向temp数组的最后一个元素的位置。

完全理解本解法需要理解我定义的密集子串和链接法转直接覆盖等概念。好好理解一下,很简单,有什么问题可以在评论区交流。

看完之后是不是有了想法了呢,快来练练手吧>>查看题目:数组染色
720-150.png

相关文章
|
3月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
53 0
|
3月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
59 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
3月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
39 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
5月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
5月前
|
算法
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
|
9天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
22天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
157 80
|
10天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
10天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。
|
8天前
|
移动开发 算法 计算机视觉
基于分块贝叶斯非局部均值优化(OBNLM)的图像去噪算法matlab仿真
本项目基于分块贝叶斯非局部均值优化(OBNLM)算法实现图像去噪,使用MATLAB2022A进行仿真。通过调整块大小和窗口大小等参数,研究其对去噪效果的影响。OBNLM结合了经典NLM算法与贝叶斯统计理论,利用块匹配和概率模型优化相似块的加权融合,提高去噪效率和保真度。实验展示了不同参数设置下的去噪结果,验证了算法的有效性。

热门文章

最新文章