zoukankan      html  css  js  c++  java
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素

    一、问题描述

    今天在MSDN论坛中看到这样的一个问题,觉得非常锻炼思维能力,所以这里记录下来作为备份,题目的要求是这样的:

    假设有一组字符串数组{"0","0","1","2","3",“0”,"4","0","0"},如何查找使0等于离它最近的且不为0的元素,如果离它最近的不为0的元素有两个,则等于上一个元素,即想得到重新赋值后这样的数组{"1","1","1","2","3",“3”,"4","4","4"}

    二、实现思路

    这里的实现思路摘自论坛中 zjyh16的回复,实现思路为:

    • 1. 首先对数组里面的数字进行一次遍历,如果当前的值不为“0”把值添加进的结果数组中,否则对它进行处理。
    • 2. 处理不为“0”的值的时候,用一种“等距离比较”的方法,找出等距离内的左右2个值,优先看左边的值是否为“0”,如果是的话跳过,如果不是的话将结果数组内的当前值替换为此值。
    • 3. 距离(就是代码里面的j)的最大值为数组长度减去1,遍历的时候注意i-j的值不小于0,i+j的值要小于数组长度。

    具体实现代码为:

      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();
            

    三、运行结果

  • 相关阅读:
    Plus One
    Move Zeroes
    Valid Number
    对于人生道路的些许感慨
    关于session.getValueNames()的一个问题
    jsp记录
    alter和modify的区别
    关于新手SQL Server 2008数据库的首次使用出现的问题
    今年大二,要开始java的学习了,听前辈说记录一下自己的学习过程会有一些好处
    MFC多文档无法显示可停靠窗格
  • 原文地址:https://www.cnblogs.com/zhili/p/3241001.html
Copyright © 2011-2022 走看看