codancer现在有一个长度为n的数组a,对于每个这个数组的每个数字,我们必须染上颜色,但是codancer有一个限制条件:如果i输入一个正整数n和数组a。(1<=n<=100000,0<=a[i]<=1000000000).输出最少需要的颜色种类数。
定义一个数组 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]。我说的链接如下图所示 可以发现,每次比较都是和链表最后一个元素比较,所以前面的元素可以覆盖,如下面的直接覆盖法,也是用数组实现,很简单。而且还可以发现,temp 数组永远是递减的,这样也满足密集子串,因为从上往下走,找到满足的即可停止,不需要继续往下。最终,temp 数组有几个元素,答案就是多少。可以用 ans 一致指向 temp数组的最后一个元素的位置。 因此:输入:5 [2,1,4,5,3] 输出:2 注:把 a[1],a[3],a[4] 染同一种颜色,把 a[2] 和 a[5] 染成另外一种颜色。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。