【发布时间】:2019-12-10 23:53:50
【问题描述】:
我申请了一份工作,准雇主给我发了以下HackerRank问题,在公共区域找不到。
给出一个整数数组,计算所有可能对的任何项目与任何较低索引的较小项目之间的最大差异。换句话说,对于数组arr,找到arr[j] - arr[i] 的最大值对于所有i, j 其中0 <= i < j < n 和arr[i] < arr[j]。如果没有项目具有较低索引的较小项目,则返回-1。
例如,给定arr = [1,2,6,4],首先将 2 与其左侧的元素进行比较。 1 更小,所以计算差值2 - 1 = 1。 6 大于 2 和 1,因此计算 6 - 2 = 4 和 6 - 1 = 5 的差值。最后一个元素 4 只比 2 和 1 大,区别是4 - 2 = 2 和4 - 1 = 3。最大的区别是6 - 1 = 5。
功能说明
完成函数maxDifference。该函数必须返回一个整数,表示arr 中的最大差值。
maxDifference 具有以下参数:
arr[arr[0], arr[1],...arr[n-1]]:整数数组。
约束
- 1
- -10^6
解决方案
fun maxDifference(arr: Array<Int>): Int {
var min: Pair<Int, Int> = Pair(0, 0)
var max: Pair<Int, Int> = Pair(0, 0)
var result = -1
for(i in 0 until arr.size) {
when {
i == 0 -> {
min = Pair(i, arr[i])
max = Pair(i, arr[i])
}
min.second > arr[i] -> min = Pair(i, arr[i])
max.second < arr[i] -> max = Pair(i, arr[i])
}
if(max.first > min.first && max.second > min.second)
result = kotlin.math.max(result, max.second - min.second)
}
return result
}
问题
由于某种原因,上述解决方案没有通过HackerRank 中的所有测试用例。 不幸的是,发送此测试的雇主不愿意透露测试用例以查看问题出在哪里。 代码本身工作正常。
测试用例
- [2,3,10,2,4,8,1] - (预期结果为 8)
- [7,9,5,6,3,2] - (预期结果为 2)
- [3] -(预期结果为 -1)
- [-3, -2] -(预期结果为 1)
【问题讨论】:
标签: arrays algorithm performance kotlin