最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.net 反序題目的詳細解答第1/2頁

 更新時間:2009年06月13日 20:34:47   作者:  
在各種答案,以及平時面試過程中,這道題總歸會有一些非常典型的錯誤發(fā)生。其中給老趙的感覺也非常有意思,不知其中的“思路”是否如老趙猜測那樣。
請將方法補充完整:
復制代碼 代碼如下:

static void Reverse(int[] array, int begin, int end)
{
...
}

Reverse方法的作用是將array數(shù)組中,從begin下標到end下標之間的元素反序一下,如一個數(shù)組初始值是[1, 2, 3, 4, 5, 6],begin為1,end為4,那么當調用了Reverse之后,array數(shù)組中的元素便依次成為[1, 5, 4, 3, 2, 6],其中從array[1]到array[4]之前的元素被反序了。此外補充一點……其實本不用補充:這個方法需要對傳入參數(shù)的正確性進行校驗,如果用戶調用該方法時傳入了非法的參數(shù),那么則需要拋出異常,并寫清原因。您可以使用您喜歡的語言來實現(xiàn):C#,VB,Java,Ruby,Python……但是請不要使用內置庫中已經有的功能。:)

  很簡單,不是嗎?只可惜截止到目前,也只有1人給出了正確答案。如果您沒有做過這道題目,那么在查看下面的分析之前,不妨拿張紙拿支筆,寫下您的答案,然后再聽老趙慢慢講來…

主體邏輯
  這道題目的主題邏輯其實非常簡單。不就是把數(shù)組中的一部分反序嗎?不過從這一點上面來說,代碼的清晰程度也有較大差距。好的做法和普通的做法,從編程難度和理解上都有一定差距。例如:

1、許多朋友的做法是:既然是反轉數(shù)組的一部分元素,那么只要找到中間的位置,然后計算出和begin的偏移量,然后……怎么怎么一搞,就完成了——嗯,似乎還需要根據(jù)進行begin和end中間的元素個數(shù)是奇數(shù)還是偶數(shù)分別處理。

2、另一些朋友的做法是:開一個新數(shù)組(長度為end - begin + 1),將begin到end之間的元素放到新數(shù)組中去,然后反序,然后再復制回來。

3、還有一個朋友認為用棧:把begin到end之間的元素給push到棧中,再一個一個pop出來依次賦值給begin到end,這樣就反序了……唔!數(shù)據(jù)結構學的不錯!

  只可惜,這樣的做法都復雜了一些。3種做法的時間復雜度均為O(end – begin),但是只有第一種做法的空間復雜度是O(1),而后兩者也都是線性的空間復雜度。那么老趙眼里最好的做法是什么呢?
復制代碼 代碼如下:

public static void Reverse(int[] array, int begin, int end)
{
while (end > begin)
{
int temp = array[begin];
array[begin] = array[end];
array[end] = temp;

begin++;
end--;
}
}

end和begin兩個下標從初始值開始依次向中間逼近,每次都交換一下數(shù)組中的元素。最終,while在判斷的時候會發(fā)現(xiàn)end == begin(begin和end之間總共奇數(shù)個元素),或end < begin(begin和end之間總共偶數(shù)個元素)。無論哪種情況,都表示反序已經完成。
參數(shù)校驗
上面的做法應該說是最簡單的一種,不過實際在評判答案的時候,直接結果正確,老趙都認為是正確的。只可惜,幾乎沒有朋友在“參數(shù)校驗”這方面作對。

  順便提一下的是,有位朋友給我留言很有意思:“老師只給了一個測試數(shù)據(jù),如果要用其它測試數(shù)據(jù)的話比如比較特殊的,那請老師下次把測試數(shù)據(jù)列好。”這句話讓我木然:測試數(shù)據(jù)是無窮無盡的,難道需要都列出來?平時寫程序,用戶會指出他的所有操作步驟嗎?給測試數(shù)據(jù)的目的是為了幫助理解題意,題目的要求都寫清楚了,做題才有意義。如果一道題目只要求把給出的測試數(shù)據(jù)運行,那么又有誰不會做呢?老趙這里就可以立即給出一個萬能模板:
復制代碼 代碼如下:

if (...)
{
return ...
}
else if (...)
{
return ...
}

...

按理來說,即使題目中沒有寫明需要參數(shù)校驗,一個優(yōu)秀的實現(xiàn)也應該自帶這一點。

其實只要仔細一些,把參數(shù)所有的錯誤情況列舉出來并不是難事:
復制代碼 代碼如下:

1、array == null
2、begin < 0;
3、end < begin
4、end >= array.Length

那么,其他一些情況是否應該一并判斷呢?例如end < 0,array.Length == 0或者begin >= length。老趙認為“不判斷也沒有關系”,因為以上的判斷已經確保不會出現(xiàn)額外的錯誤情況了。那么begin == end是否算是問題呢?老趙認為,這個判斷也可以省略。不過……如果begin > end,那么是否應該把兩者的數(shù)值進行交換?我不知道為什么有些朋友這么做了,不過老趙認為,一般來說一個方法不應該為參數(shù)進行額外“調整”——其實各大類庫都不會如此畫蛇添足。如果哪位朋友有不同看法,我們可以繼續(xù)討論。

相關文章

  • .net 反序題目的詳細解答

    .net 反序題目的詳細解答

    在各種答案,以及平時面試過程中,這道題總歸會有一些非常典型的錯誤發(fā)生。其中給老趙的感覺也非常有意思,不知其中的“思路”是否如老趙猜測那樣。
    2009-06-06
  • Asp.net防止盜鏈的實現(xiàn)原理分析

    Asp.net防止盜鏈的實現(xiàn)原理分析

    今天在書上偶然看到了如何實現(xiàn)防盜鏈的問題,到網上查看了一下盜鏈主要是其他的一些網站引用本站圖片或者下載鏈接。
    2011-01-01
  • asp.net Accee數(shù)據(jù)庫連接不穩(wěn)定解決方案

    asp.net Accee數(shù)據(jù)庫連接不穩(wěn)定解決方案

    我最最進做了個網站,我是用VS2005 + Access 數(shù)據(jù)庫連接,可以我在連接的時候總是出現(xiàn)連接不穩(wěn)定的情況,同樣的代碼,一個字也沒改,就是連接不上,但是有的又連接的上。真是郁悶,真是弄死人。
    2009-07-07
  • ASP.NET Core中使用令牌桶限流的實現(xiàn)

    ASP.NET Core中使用令牌桶限流的實現(xiàn)

    這篇文章主要介紹了ASP.NET Core中使用令牌桶限流的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • asp.net C#生成和解析二維碼的實例代碼

    asp.net C#生成和解析二維碼的實例代碼

    這篇文章介紹了asp.net C#生成和解析二維碼的實例代碼,有需要的朋友可以參考一下
    2013-10-10
  • DataList中TextBox onfocus調用后臺void靜態(tài)方法及獲取相應行數(shù)

    DataList中TextBox onfocus調用后臺void靜態(tài)方法及獲取相應行數(shù)

    DataList中我放了一個TextBox 現(xiàn)在的問題是當我光標放到TextBox上的時候。如果讓onfocus調用后臺某一個void靜態(tài)方法并且在靜態(tài)方法里邊獲取光標相應的DataList的相應行數(shù),本文介紹如何實現(xiàn),感興趣的朋友可以了解下
    2013-01-01
  • asp.net core下給網站做安全設置的方法詳解

    asp.net core下給網站做安全設置的方法詳解

    這篇文章主要給大家介紹了關于asp.net core下給網站做安全設置的相關資料,文章通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • ASP.NET 上傳文件導入Excel的示例

    ASP.NET 上傳文件導入Excel的示例

    這篇文章主要介紹了ASP.NET 上傳文件導入Excel的示例,幫助大家更好的理解和學習使用.net技術,感興趣的朋友可以了解下
    2021-04-04
  • asp.net 使用ObjectDataSource控件在ASP.NET中實現(xiàn)Ajax真分頁

    asp.net 使用ObjectDataSource控件在ASP.NET中實現(xiàn)Ajax真分頁

    ASP.NET 3.5中新增加的ListView控件是一個用于頁面數(shù)據(jù)綁定和界面布局的非常棒的控件,它在ASP.NET 2.0 GridView的基礎上做了很多改進,用戶在使用時可以控制的元素更多,開發(fā)時的靈活性更大了,個人覺得ListView在使用時比DataGrid和GirdView更加順手。
    2009-11-11
  • ASP.NET MVC 3仿Server.Transfer效果的實現(xiàn)方法

    ASP.NET MVC 3仿Server.Transfer效果的實現(xiàn)方法

    這篇文章主要介紹了ASP.NET MVC 3仿Server.Transfer效果的實現(xiàn)方法,需要的朋友可以參考下
    2015-10-10

最新評論

新和县| 宁化县| 秭归县| 宜州市| 建昌县| 库尔勒市| 蒙自县| 体育| 宜川县| 道真| 西昌市| 云霄县| 南充市| 三穗县| 理塘县| 彭阳县| 江阴市| 晋宁县| 阿克| 乐清市| 白河县| 兴城市| 苏州市| 泸州市| 和龙市| 昌乐县| 申扎县| 清远市| 耒阳市| 曲阜市| 林芝县| 平果县| 资讯 | 莎车县| 靖安县| 金秀| 玛纳斯县| 漯河市| 新邵县| 岐山县| 尼玛县|