In [7]:
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
max_area = 0
for m, a_m in enumerate(height):
for n, a_n in enumerate(height):
if n==m: continue
temp = abs(m-n)*min(a_m, a_n)
if temp>max_area:
max_area = temp
return max_area
In [8]:
s = Solution()
In [9]:
s.maxArea([1,1])
Out[9]:
In [ ]:
In [10]:
import json
In [116]:
f= open("demo.json", "r")
demo_input = json.loads(f.read())
In [117]:
demo_input[:5],len(demo_input)
Out[117]:
In [13]:
s.maxArea([1,2]),s.maxArea([2,2,2]),
Out[13]:
In [14]:
%time s.maxArea([1,2])
Out[14]:
In [15]:
%time s.maxArea(demo_input)
Out[15]:
In [46]:
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
max_area = 0
for m, a_m in enumerate(height):
for n in range(m+1, len(height)):
a_n = height[n]
temp = abs(m-n)*min(a_m, a_n)
if temp>max_area:
max_area = temp
return max_area
In [47]:
s = Solution()
In [48]:
%time s.maxArea(demo_input)
Out[48]:
In [162]:
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
max_area = 0
# 初始化矩阵
x = 0
y = len(height)-1
ret = []
cal =0
while x!=y:
if height[x]>height[y]:
ret.append(abs(y-x)*height[y])
y-=1
elif height[x]<=height[y]:
ret.append(abs(y-x)*height[x])
x+=1
cal+=1
print cal
max_area = max(ret)
return max_area
In [163]:
s = Solution()
In [164]:
%time s.maxArea(demo_input)
Out[164]:
In [148]:
s.maxArea([1,2]),
Out[148]:
In [142]:
s.maxArea([2,1])
Out[142]:
In [135]:
s.maxArea([2,2,2])
Out[135]:
In [200]:
def test4(m=10000):
for i in iter(range(m)):
for j in iter(range(m)): break
In [201]:
def test1(m=10000):
for i in range(m):
for j in range(m): break
def test3(m=10000):
i=j=0
while i<m:
i+=1
j=0
while j<m:
j+=1
break
def test2(m=10000):
for i in range(m):
break
In [202]:
%time test2()
%time test3()
%time test1()
%time test4()
通过以上例子说明一个问题,python range的方式来进行两重迭代是要动态生成 list的
所以下面的代码虽然和正确代码表达的是一个疑似,但是执行效率完全不是一个数量级
In [160]:
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
max_area = 0
# 初始化矩阵
len_h = len(height)
len_v = len(height)
ret = []
cal = 0
for m in range(0, len_h):
for n in range(len_v-1, m,-1):
cal+=1
if height[m]>=height[n]:
len_v-=1
ret.append((n-m)*height[n])
elif height[m]<height[n]:
ret.append((n-m)*height[m])
break
max_area = max(ret)
print len(ret), cal
return max_area
In [183]:
s = Solution()
%time s.maxArea(demo_input)
Out[183]:
In [ ]: