开发者社区> 问答> 正文

遇到一个数组染色的问题,求解答。

codancer现在有一个长度为n的数组a,对于每个这个数组的每个数字,我们必须染上颜色,但是codancer有一个限制条件:如果i输入一个正整数n和数组a。(1<=n<=100000,0<=a[i]<=1000000000).输出最少需要的颜色种类数。

展开
收起
游客4skzfvnrxrzbi 2021-12-23 16:43:01 480 0
1 条回答
写回答
取消 提交回答
  • 定义一个数组 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数组的最后一个元素的位置。 因此:输入:5 [2,1,4,5,3] 输出:2 注:把 a[1],a[3],a[4] 染同一种颜色,把 a[2] 和 a[5] 染成另外一种颜色。

    2021-12-23 18:33:28
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载