temp=list_of_number[:]
temp.sort()
maxlist=temp.pop()
maxindex=list_of_number.index(maxlist)
i=0
maxarea=0
j=len(list_of_number)-1
while(maxindex-i):
if (maxindex-i)*list_of_number>maxarea:
maxarea=(maxindex-i)*list_of_number
i+=1
while(j-maxindex):
if (j-maxindex)*list_of_number>maxarea:
maxarea=(j-maxindex)*list_of_number
j-=1
return maxarea
穷举法。。。
def max_area(list_of_number):
r = 0
for i in range(len(list_of_number)-1):
for j in range(i+1, len(list_of_number)):
t = min(list_of_number, list_of_number) * (j-i)
if t > r:
r = t
return r
print(max_area()) #calculte (len-1)^2/2 {:10_279:}{:10_279:}{:10_279:} 本帖最后由 gunjang 于 2017-11-29 22:38 编辑
@jerryxjr1220 好吧,稍微优化下,好像就没有超过0.01s的。。。{:5_91:}
import random,time
def max_area0(list_of_number): #calculte (len-1)^2/2
r = 0
for i in range(len(list_of_number)-1):
for j in range(i+1, len(list_of_number)):
t = min(list_of_number, list_of_number) * (j-i)
if t > r: r = t
return r
def max_area(list_of_number):
r = 0
for i in range(0, len(list_of_number)-1):
minstep = r//list_of_number + 1
j= len(list_of_number) - 1
while j >= i+minstep:
t = min(list_of_number, list_of_number) * (j-i)
if t > r:
r = t
minstep = r//list_of_number + 1
j -= 1
return r
print(max_area())#49
num5000 =
st = time.time()
print('new maxarea:', max_area(num5000), time.time()-st)
st = time.time()
print('maxarea 0:', max_area0(num5000), time.time()-st)
shuo 发表于 2017-11-27 16:06
水平有限,实在想不出怎么优化,坐等题主答案呢。
注:这里回复的是评分者
那个不是三元操作符吗 timeislife 发表于 2017-12-1 06:28
注:这里回复的是评分者
那个不是三元操作符吗
三元操作符是x=a if b else c,他原来的写法是x=a if b是错的 我投票猜中了吗? 小白一名,说说我的思路:
无论求多少列之间的面积都可以
1/首先判断两个边界A、B,哪个最长,如果最长边在左边,就从左边开始计算,反之从右边。假设A>B,A在左边。
2/然后找AB之间剩余哪条边最长,假设为C,(重点来了),然后判断ABC长度大小,如果C<B<A,那么游戏结束,所有面积就是B的长度乘AB距离。这是一个循环,而且是整个循环的结束判断条件。
3/如果C>B,那么就会有C>A或者C<A,其实C与A的大小不影响后面的循环。第一块面积就是A与C之间的面积了。
4/然后循环就来了。C>B,C与B成了新的边界,那就把C当作A吧。于是乎就有了新的ABC,直到出现C<B<A,游戏结束,得到的所有面积加起来,就是原始边界AB之间的面积。
注:其实也不用分从左还是从右开始,就是3条边界的关系,为了表述方便,就说从左开始了。 说白了,就是求2条最长边之间的面积,然后求剩余部分2条最长边的面积,直到最后两条最长边,有一条是最原始的边界B。
表达的不是很清楚,意思大家明白就好了。
小白一枚,不会代码。代码怎么写,就靠诸位大神了。
哪位大神,指导一下这个思路是不是正确呢? HNXC 发表于 2017-12-3 09:33
小白一名,说说我的思路:
无论求多少列之间的面积都可以
思路是对的,代码的话优胜者们已经都提供了很优秀的代码了,可以作为参考。
自己动手写写代码才会提高水平哦! jerryxjr1220 发表于 2017-12-3 11:49
思路是对的,代码的话优胜者们已经都提供了很优秀的代码了,可以作为参考。
自己动手写写代码才会提高水 ...
嗯,好的。 def max_area(_list):
rs=[]
for x in range(len(_list)):
for y in range(x,len(_list)-1):
rs.append(min(_list,_list)*(y-x+1))
return max(rs) 虽然看不懂,也看不懂答案 但
def max_area(a):
a=
for i in range(len(a)):
for j in range(len(a)-1):
l = len(a,a)
s = i*j*l
print(s)
'''your code here'''
return result_of_max_area
页:
1
[2]