一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

一串首尾相連的珠子(m個),有N種顏色(N《=10),設(shè)計一個算法,取出其中一段,要求包含所有N中顏色,并使長度最短。并分析時間復(fù)雜度與空間復(fù)雜度。

 白雪~~~ 2012-03-10

一串首尾相連的珠子(m個),有N種顏色(N《=10),設(shè)計一個算法,取出其中一段,要求包含所有N中顏色,并使長度最短。并分析時間復(fù)雜度與空間復(fù)雜度。

這道題在網(wǎng)上著名的帖子

微軟等公司數(shù)據(jù)結(jié)構(gòu)+算法面試100題系列 有詳細(xì)的描述,算法思想好像是

此題猶如在一個長字符串中找出其中一段,其中有一個字符集合的所有字符,并且這段字符串要最短,當(dāng)然,這個長字符串是首位相連的??梢远x一個head和一個tail標(biāo)識字符串的頭和尾。定義一個數(shù)組charset【256】,用這個數(shù)組記錄集合中的字符出現(xiàn)的次數(shù),之所以數(shù)組大小是256,大概是要用數(shù)組下標(biāo)來標(biāo)識字符。剛開始head=tail=0,tail++直到字符集合中所有的字符數(shù)都不為0為止,然后head++直到字符集合中某個字符的數(shù)變?yōu)?,這是便得到一個字符段。當(dāng)tail>=m時,tail=tail%m,當(dāng)head為m時算法結(jié)束.

  1. #include<stdio.h>
  2. #include<string.h>
  3. //判斷集合的字符是否都已出現(xiàn)
  4. int isallin(int* chararray,char* charset);
  5. //begin返回段的開始位置,length返回你懂的
  6. void findshortest(char* str,char* charset,int* begin,int* length);
  7. //試用一下
  8. int main()
  9. {
  10. char* str = "fuckyouworld!whyamihere.";
  11. char* charset = "fu !";
  12. int begin,length;
  13. findshortest(str,charset,&begin,&length);
  14. printf("%d-%d",begin,length);
  15. getchar();
  16. }
  17. int isallin(int* chararray,char* charset)
  18. {
  19. int setlen = strlen(charset);
  20. int i;
  21. for(i = 0;i < setlen;i++)
  22. if(chararray[charset[i]] == 0)
  23. return 0;
  24. return 1;
  25. }
  26. void findshortest(char* str,char* charset,int* begin,int* length)
  27. {
  28. int head,tail;
  29. head = tail =0;
  30. int chararray[256] = {0};
  31. int stringlength = strlen(str);
  32. int shortestlength = stringlength;
  33. int shortesthead = 0;
  34. while(head < stringlength)
  35. {
  36. //tail自加,考慮長字符串不能包含字符集合的所有字符的情況
  37. while(!isallin(chararray,charset)){
  38. //考慮長字符串不能包含字符集合的所有字符的情況
  39. if(head == 0 && tail == stringlength){
  40. *begin = 0;*length = 0;
  41. return;
  42. }
  43. chararray[str[tail % stringlength]] = chararray[str[tail % stringlength]] + 1;
  44. tail++;
  45. }
  46. while(isallin(chararray,charset)){
  47. chararray[str[head % stringlength]] = chararray[str[head % stringlength]] - 1;
  48. head++;
  49. }
  50. if(shortestlength > tail - head + 1){
  51. shortestlength = tail - head + 1;
  52. shortesthead = head - 1;
  53. }
  54. }
  55. *begin = shortesthead % stringlength;
  56. *length = shortestlength;
  57. }

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲国产精品无遮挡羞羞| 九九九热视频免费观看| 九九热视频网在线观看| 青青免费操手机在线视频| 中日韩美一级特黄大片| 深夜日本福利在线观看| 99热在线精品视频观看| 一区二区三区亚洲国产| 亚洲国产91精品视频| 国产伦精品一区二区三区高清版 | 日本深夜福利在线播放| 日韩女优精品一区二区三区| 亚洲av日韩一区二区三区四区 | 欧美不卡一区二区在线视频| 日本一区不卡在线观看| 性欧美唯美尤物另类视频| 高跟丝袜av在线一区二区三区| 中文字幕精品人妻一区| 91久久精品中文内射| 真实偷拍一区二区免费视频| 日本中文字幕在线精品| 国产中文字幕一区二区| 国产av精品高清一区二区三区| 精品熟女少妇一区二区三区| 色综合久久超碰色婷婷| 欧美一区二区三区喷汁尤物| 五月婷婷亚洲综合一区| 欧美加勒比一区二区三区| 国产精品视频一区麻豆专区| 国产精品偷拍视频一区| 亚洲视频偷拍福利来袭| 午夜精品一区二区av| 国产欧洲亚洲日产一区二区| av国产熟妇露脸在线观看| 一区二区三区四区亚洲另类| 亚洲最新一区二区三区| 日本福利写真在线观看| 白白操白白在线免费观看| 精品人妻久久一品二品三品| 成人日韩在线播放视频| 国产一区国产二区在线视频 |