一、问题描述
今天在MSDN论坛中看到这样的一个问题,觉得非常锻炼思维能力,所以这里记录下来作为备份,题目的要求是这样的:
假设有一组字符串数组{"0","0","1","2","3",“0”,"4","0","0"},如何查找使0等于离它最近的且不为0的元素,如果离它最近的不为0的元素有两个,则等于上一个元素,即想得到重新赋值后这样的数组{"1","1","1","2","3",“3”,"4","4","4"}
二、实现思路
这里的实现思路摘自论坛中 zjyh16的回复,实现思路为:
具体实现代码为:
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
|
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();
|
三、运行结果
本文转自LearningHard 51CTO博客,原文链接:http://blog.51cto.com/learninghard/1265482,如需转载请自行联系原作者