[C# 開發技巧]如何使不符合要求的元素等於離它最近的一個元素

1、問題描述

今天在MSDN論壇中看到這樣的一個問題,以爲很是鍛鍊思惟能力,因此這裏記錄下來做爲備份,題目的要求是這樣的:c#

假設有一組字符串數組{"0","0","1","2","3",「0」,"4","0","0"},如何查找使0等於離它最近的且不爲0的元素,若是離它最近的不爲0的元素有兩個,則等於上一個元素,即想獲得從新賦值後這樣的數組{"1","1","1","2","3",「3」,"4","4","4"}數組

2、實現思路

這裏的實現思路摘自論壇中 zjyh16的回覆,實現思路爲:ide

  • 1. 首先對數組裏面的數字進行一次遍歷,若是當前的值不爲「0」把值添加進的結果數組中,不然對它進行處理。spa

  • 2. 處理不爲「0」的值的時候,用一種「等距離比較」的方法,找出等距離內的左右2個值,優先看左邊的值是否爲「0」,若是是的話跳過,若是不是的話將結果數組內的當前值替換爲此值。ci

  • 3. 距離(就是代碼裏面的j)的最大值爲數組長度減去1,遍歷的時候注意i-j的值不小於0,i+j的值要小於數組長度。字符串

具體實現代碼爲:get

string[] s = new String[9] { "0", "0", "1", "0", "0", "0", "4", "0", "3" };
            string[] result = new string[9];
            for (int i = 0; i < s.Length; i++)
            {
                if (s[i] != "0")
                {
                    result[i] = s[i];
                    continue;
                }
                // j是距離,初始化距離爲1
                for (int j = 1; j < s.Length; j++)
                {           
                    if (i - j >= 0)
                    {
                        // 左邊距離爲j的元素不等於0時
                        if (s[i - j] != "0")
                        {
                            result[i] = s[i - j];
                            break;
                        }
                    }
                    if (i + j < s.Length)
                    {
                        // 右邊距離爲j的元素不等於0時
                        if (s[i + j] != "0")
                        {
                            result[i] = s[i + j];
                            break;
                        }
                    }
                }
            }
            for (int i = 0; i < result.Length; i++)
            {
                Console.WriteLine(result[i]);
            }
               
            Console.ReadLine();

3、運行結果

相關文章
相關標籤/搜索