28 lines
659 B
Ruby
28 lines
659 B
Ruby
#Given an array arr[], find the maximum j – i such that arr[j] > arr[i].
|
||
# Time-complecity: O(n), Space-complexity:O(n)
|
||
|
||
def max_index_diff(a)
|
||
len=a.length
|
||
max_diff=-1
|
||
lmin=Array.new(len)
|
||
rmax=Array.new(len)
|
||
lmin[0]=a[0]
|
||
for i in 1...len
|
||
lmin[i]=[a[i],lmin[i-1]].min
|
||
end
|
||
rmax[len-1]=a[len-1]
|
||
for i in (len-2).downto(0)
|
||
rmax[i]=[a[i],rmax[i+1]].max
|
||
end
|
||
i=j=0
|
||
while (j<len && i<len)
|
||
if lmin[i]<rmax[j]
|
||
max_diff=[max_diff,j-i].max
|
||
j+=1
|
||
else
|
||
i+=1
|
||
end
|
||
end
|
||
return max_diff
|
||
end
|
||
max_index_diff([34, 8, 10, 3, 2, 80, 30, 33, 1]) # => 6 |