天天看點

WF4.0實戰(十三):解微軟一道面試題

題目:一個整數數列,元素取值可能是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做個比較就行了。僞代碼如下:

WF4.0實戰(十三):解微軟一道面試題

 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實戰(十三):解微軟一道面試題

下面讓我用WF4.0來實作解這個題目,思路和上面代碼思想是一緻的。

流程:

WF4.0實戰(十三):解微軟一道面試題

實作:

1、産生随機數流程GenerateRandom流程,如下圖:

WF4.0實戰(十三):解微軟一道面試題

2、驗證産生的數字是否滿足條件:

WF4.0實戰(十三):解微軟一道面試題

3、輸出結果:

WF4.0實戰(十三):解微軟一道面試題

4、整個流程:

WF4.0實戰(十三):解微軟一道面試題

運作結果:

WF4.0實戰(十三):解微軟一道面試題

0~65535範圍太大,很難産生出5位連續的數字,将範圍縮小為1-6:

WF4.0實戰(十三):解微軟一道面試題

總結:這篇文章主要說明使用WF4.0和你寫一般的C#代碼一樣,複雜的邏輯它也可以實作。一些複雜的算法可能會因為它的可視化程式設計而變得更簡單。

本文轉自麒麟部落格園部落格,原文連結:http://www.cnblogs.com/zhuqil/archive/2010/05/07/msInterview.html,如需轉載請自行聯系原作者

繼續閱讀