題目:一個整數數列,元素取值可能是0—65535中的任意一個數,相同數值不會重複出現。0是例外,可以反複出現。
請設計一個算法,當你從該數列中随意選取5個數值,判斷這5個數值是否連續相鄰。
注意:
1、5個數值允許是亂序的。比如: 8 7 5 0 6;
2、0可以通配任意數值。比如:8 7 5 0 6 中的0可以通配成9或者4;
3、0可以多次出現;
4、複雜度如果是O(n2)則不得分。
分析:通過分析你可以發現,題目隻要滿足:除0之外的最大數減去除0之外的最小數小于等于4就行了。
故隻要通過一個循環就5個數字中除0之外的最大數和最小數。求差之後與4做個比較就行了。僞代碼如下:

1 public boolean isContiguous(int[] array)
2 {
3 int min=-1;
4 int max=-1;
5 for(int i=0;i <array.length;i++)
6 {
7 if(array[i]!=0)
8 {
9 if(min==-1||min>array[i])
10 {
11 min=array[i];
12 }
13 if(max==-1||max <array[i])
14 {
15 max=array[i];
16 }
17 }
18 }
19 return max-min <=array.length-1;
20 }

下面讓我用WF4.0來實作解這個題目,思路和上面代碼思想是一緻的。
流程:
實作:
1、産生随機數流程GenerateRandom流程,如下圖:
2、驗證産生的數字是否滿足條件:
3、輸出結果:
4、整個流程:
運作結果:
0~65535範圍太大,很難産生出5位連續的數字,将範圍縮小為1-6:
總結:這篇文章主要說明使用WF4.0和你寫一般的C#代碼一樣,複雜的邏輯它也可以實作。一些複雜的算法可能會因為它的可視化程式設計而變得更簡單。
本文轉自麒麟部落格園部落格,原文連結:http://www.cnblogs.com/zhuqil/archive/2010/05/07/msInterview.html,如需轉載請自行聯系原作者