我有一个整数数组说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;
}
答案 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)