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

简介: 可以采用链表的思想,定义一个数组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

相关文章
|
11天前
|
算法
算法系列--两个数组的dp问题(2)(下)
算法系列--两个数组的dp问题(2)(下)
17 0
|
11天前
|
存储 算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(下)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
15 0
|
11天前
|
算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(上)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
20 0
|
11天前
|
算法 计算机视觉
算法系列--两个数组的dp问题(1)(下)
算法系列--两个数组的dp问题(1)
18 0
|
11天前
|
算法
算法系列--两个数组的dp问题(1)(上)
算法系列--两个数组的dp问题(1)
13 0
|
29天前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
23 2
|
1月前
|
算法
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
39 1
|
2天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。

热门文章

最新文章