查找数组的相邻元素之间的最大距离

时间:2017-04-30 16:51:13

标签: c# arrays

我有一个整数数组说int[] Arr={1, 4, 7, 3, 2 }。现在相邻侧意味着2个连续数字(不是阵列的数字系统),即1,2是相邻的。我写了一些代码,请帮我找出简短的信息并进行优化。

    static void Main(string[] args)
    {
        int[] arr = { 1, 4, 7, 3, 2 };
        Console.WriteLine("adjacent indices with maximum value is {0}",Solution(arr));
        Console.ReadLine();
    }

    static int Solution(int[] arr)
    {
        int maxDistance = -1;
        int newMaxDistance = 0;
        int a = 0, b = 0;

        for (int i = 0; i < arr.Length; i++)
        {
            a = arr[i];
            if (i < arr.Length - 1)
            {
                b = arr[i + 1];
            }

            for (int j = i + 1; j < arr.Length; j++)
            {

                if (arr[j] < b && arr[j] > a)
                {
                    maxDistance = j - i;
                }
                else
                {
                    newMaxDistance = j - i;
                }
            }
        }
        if (newMaxDistance > maxDistance)
        {
            maxDistance = newMaxDistance;
        }
        return maxDistance;


    }

3 个答案:

答案 0 :(得分:3)

将每个元素转换为一对(值,位置),例如 {1,4,7,3,2} - &gt; {(1,0),(4,1),(7,2),(3,3),(2,4)}。然后按值排序:{(1,0),(2,4),(3,3),(4,1),(7,2)}。然后浏览数组,每次看到两个连续的整数时,计算它们之间的差异。

答案 1 :(得分:0)

如果每个数字只出现一次,那么您可以将每个元素的索引存储在Dictionary内。

因此1号字典将等于0,因为1是数组中的第0个元素。 而7的字典将是2,因为7是数组中的第二个元素。 (例如)

现在,遍历数组并检查每个元素的相邻数字是否在Dictionary中。如果它们在字典中,则减去两个数字的索引并取绝对值。

例如,对于您的示例中的数字3,您需要检查:

数字3的索引是3(因为3是数组中的第三个元素)。 你要检查数字2和4是否在字典中。 (毗邻3) 2在Dictionary中,因此Dictionary将返回4(因为2是数组中的第四个元素)。 你要减去元素3的索引(3)和元素2的索引(4)。答案是-1的绝对值,即1。

继续使用其他数字。

答案 2 :(得分:0)

Scala解决方案如下所示

 object abc extends App {

  def solution(a: Array[Int]): Int = {

    val arr = Array(0,3,3,7,5,3,11,1)

    val indexArray = a.zipWithIndex.toList.sortBy(_._1)

    indexArray.foldLeft((0,0)){
        case (acc, value) =>
          if (value._2 == 0) (value._2, 1)
          else (value._2 , acc._2 + value._1 - acc._1)
      }._2
  }

  val arr = Array(0,3,3,7,5,3,11,1)

  val res = solution(arr)

  println(res)