我刚刚尝试了一个编码挑战来编写一个函数,该函数返回数组数组中所有可能的最短左分区的长度,其所有元素都小于相应右分区中的所有元素。查找阵列分区最大(左)<最小(右) - 可能在O(N)时间?
考虑到每月温度读数可变,冬季温度低于所有夏季温度的规则,给出的情景是找到“冬季”和“夏季”之间的差距。我们可以假设至少有一个正确的分区,目标是获得最短的冬季。
是否可以在O(N)时间内完成此操作,即处理时间随温度读数的数量线性增加?最快的解决方案,我可以拿出必须找到每一个最大的冬季温度被认为是最低的夏季温度(最低数量在正确的分区):
function shortestWinterLength temps
maxWinterTemp = -Infinity
for i from 0 til temps.length
minSummerTemp = Infinity
for j from i + 1 til temps.length
minSummerTemp = Math.min minSummerTemp, temps[j]
maxWinterTemp = Math.max maxWinterTemp, temps[i]
if maxWinterTemp < minSummerTemp
return i + 1