今天在MSDN论坛中看到这样的一个问题,觉得非常锻炼思维能力,所以这里记录下来作为备份,题目的要求是这样的:
假设有一组字符串数组{"0","0","1","2","3",“0”,"4","0","0"},如何查找使0等于离它最近的且不为0的元素,如果离它最近的不为0的元素有两个,则等于上一个元素,即想得到重新赋值后这样的数组{"1","1","1","2","3",“3”,"4","4","4"}
1. 首先对数组里面的数字进行一次遍历,如果当前的值不为“0”把值添加进的结果数组中,否则对它进行处理。
2. 处理不为“0”的值的时候,用一种“等距离比较”的方法,找出等距离内的左右2个值,优先看左边的值是否为“0”,如果是的话跳过,如果不是的话将结果数组内的当前值替换为此值。
3. 距离(就是代码里面的j)的最大值为数组长度减去1,遍历的时候注意i-j的值不小于0,i+j的值要小于数组长度。
具体实现代码为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<code>string</code><code>[] s = </code><code>new</code> <code>String[9] { </code><code>"0"</code><code>, </code><code>"0"</code><code>, </code><code>"1"</code><code>, </code><code>"0"</code><code>, </code><code>"0"</code><code>, </code><code>"0"</code><code>, </code><code>"4"</code><code>, </code><code>"0"</code><code>, </code><code>"3"</code> <code>};</code>
<code> </code><code>string</code><code>[] result = </code><code>new</code> <code>string</code><code>[9];</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i = 0; i < s.Length; i++)</code>
<code> </code><code>{</code>
<code> </code><code>if</code> <code>(s[i] != </code><code>"0"</code><code>)</code>
<code> </code><code>{</code>
<code> </code><code>result[i] = s[i];</code>
<code> </code><code>continue</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>// j是距离,初始化距离为1</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>j = 1; j < s.Length; j++)</code>
<code> </code><code>{ </code>
<code> </code><code>if</code> <code>(i - j >= 0)</code>
<code> </code><code>{</code>
<code> </code><code>// 左边距离为j的元素不等于0时</code>
<code> </code><code>if</code> <code>(s[i - j] != </code><code>"0"</code><code>)</code>
<code> </code><code>{</code>
<code> </code><code>result[i] = s[i - j];</code>
<code> </code><code>break</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>if</code> <code>(i + j < s.Length)</code>
<code> </code><code>// 右边距离为j的元素不等于0时</code>
<code> </code><code>if</code> <code>(s[i + j] != </code><code>"0"</code><code>)</code>
<code> </code><code>result[i] = s[i + j];</code>
<code> </code><code>}</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i = 0; i < result.Length; i++)</code>
<code> </code><code>Console.WriteLine(result[i]);</code>
<code> </code>
<code> </code><code>Console.ReadLine();</code>

本文转自LearningHard 51CTO博客,原文链接:http://blog.51cto.com/learninghard/1265482,如需转载请自行联系原作者