题目:
Given an array arr[], find the maximum j – i such that arr[j] > arr[i]
一个数组,找出最大下标差j-i,且a[i]
分析:
i必定在以第一个元素开始的降序列中(可以采用反正发证明:假设存在最大下标距离的两个下标i和j,i
python 代码:
# -*- coding: utf-8 -*-
from random import randint
#generate a unsorted list
origin = []
def randomList():
for i in xrange(0,10,1):
origin.append(randint(-10,10))
print origin
return origin
def maxSpan(data):
lmin = []
rmax = []
temp = data[0]
lmin.append(0)
for i in xrange(1,len(data)):
if data[i] < temp:
lmin.append(i)
temp = data[i]
else:
pass
length = len(data)
temp = data[length-1]
rmax.append(length-1)
for i in xrange(length-2,-1,-1):
if data[i] > temp:
rmax.insert(0,i)
temp = data[i]
else:
pass
i,j = 0,0
result = 0
while i < len(lmin) and j < len(rmax):
if data[lmin[i]] < data[rmax[j]]:
# print data[lmin[i]],data[rmax[j]],lmin[i],rmax[j]
result = result if result > (rmax[j]-lmin[i]) else (rmax[j]-lmin[i])
j += 1
else:
i += 1
print result
if __name__ == "__main__":
maxSpan(randomList())