解题笔记(29)――珠子问题 - wuzhekai的专栏 - 博客频道 - CSDN.NET
问题描述:一串首尾相连的珠子(n个),有N种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N种颜色,并使长度最短。并分析时间复杂度与空间复杂度。
思路:可以利用一种计数的方法。定义两个指针p1和p2,主要有三个步骤:
(1)p1向前移动,如果p1所指的珠子颜色编号为 i ,则增加 i 的出现次数。当出现的颜色种数为N时,p1停止。
(2)p2向前移动,如果p2所指的珠子颜色编号为 i ,则减少 i 的出现次数。当出现的颜色种数减为N-1时,p2停止。
(3)p1和p2所指的这段珠子,包含了N种颜色。如果比当前的最小段更短,则进行更新。回到(1)继续,循环终止条件为p2指向最后一个珠子。
Read full article from 解题笔记(29)――珠子问题 - wuzhekai的专栏 - 博客频道 - CSDN.NET