文章标题
来源:互联网 发布:淘宝微信创业故事 编辑:程序博客网 时间:2024/05/16 16:58
携程笔试题:一串首尾相连的珠子(m 个),有N 种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
思路:先从index=0处搜索,每检查一颗珠子,响应的颜色数量+1,如果是新的颜色则总颜色数+1.
当颜色总数为n时,找到第一个满足条件的连续序列。
1>从该序列起始处搜索,若搜索处的颜色数量不为1,则表明该串还有别的珠子有该颜色,继续往前搜索并更新该序列,起始索引位置+1.
若搜索处颜色数量为1,停止搜索。
2>比较最佳序列长与当前序列长,更新最佳序列。记录当前序列起始位置。从第一个满足条件的序列继续index++,并检查1,2条件。
package test;public class Ctrip { int[] colors=new int[10]; int colorsCount=0; public void find(int[] arr,int len,int colorsNeed){ int bestStartIndex=0; int bestLen=len; int lastStartIndex=0; int firstFoundEnoughPearls=0; for(int i=0;i<arr.length;i++){ if(colors[arr[i]]==0){ colorsCount++; } colors[arr[i]]++; if(colorsCount==colorsNeed){ firstFoundEnoughPearls=i; int j=lastStartIndex; while(colors[arr[j]]>1){ colors[arr[j]]--; j++; } if(bestLen>(i-j+1)){ bestStartIndex=j; bestLen=i-j+1; if(bestLen==colorsNeed){ break; } } lastStartIndex=j; } } for(int i=0;i<firstFoundEnoughPearls;i++){ if(colors[arr[i]]==0){ colorsCount++; } colors[arr[i]]++; int j=lastStartIndex; while(colors[arr[j]]>1){ colors[arr[j]]--; j++; } if(bestLen>(i-j+len+1)){ bestLen=i-j+len+1; bestStartIndex=j; if(bestLen==colorsNeed){ break; } } lastStartIndex=j; } int offset=bestStartIndex; System.out.println("bestLen:"+bestLen); System.out.println("bestStartIndex:"+bestStartIndex); for(int i=0;i<bestLen;){ System.out.print(arr[i+offset]+" "); i++; if((i+offset)>=len){ offset=0-i; } } }}
package test;public class TestCtrip { public static void main(String args[]){ int[] arr={1,2,3,3,2,1,4,2,3,2,6,4,5,2,6,2,3,4,1,2,5,2,3,4,5,6}; int m=arr.length; int n=6; Ctrip c=new Ctrip(); c.find(arr, m, n); }}
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 在VS2008环境下 python 利用调用 C++程序 接口
- Java中json的使用之创建篇(三)
- 如何用一维数组来解决01背包和完全背包问题?
- 异常声明
- BESTCODER 68
- 文章标题
- 【设计模式】抽象工厂模式(二)- PHP
- 第 1 章 设备驱动简介
- 打开设置界面报错问题
- 加密和安全
- 线程的实现(通过Runnable接口实现资源的共享:卖票)
- 关于引用.so(在使用第三方的SDK时,使用库跟.so)
- Android使用HttpURLConnection访问接口
- 5.1趣味素数之素数