试图解决黑客等级问题。
花园里有植物。这些植物中的每一种都添加了一定量的杀虫剂。每天之后,如果任何一种植物比左边的植物含有更多的杀虫剂,比左边的植物弱,那么它就会死亡。您将得到每种植物中农药的初始值。打印没有植物死亡的天数,即没有比植物左边的植物含有更多农药的时间。
我用堆栈来解决这个问题。例子如下:
a = 6 5 8 4 7 10 9
10 > 9 a = 6 5 8 4 7 10 b = 9
7 > 10 a = 6 5 8 4 7 b = 9
4 > 7 a = 6 5 8 4 b = 9
8 > 4 a = 6 5 8 b = 9 4
5 > 8 a = 6 5 b = 9 4
6 > 5 a = 6 5 b = 9 4
在此之后,只需使用a = a + b.reverse()
创建一个新列表。重新启动进程,并在列表按反向顺序排序时退出。
这给我的时间还是超过了。有什么想法吗?
n = int(input())
first_list = input().split()
first_list = [int(i) for i in first_list]
count = 0
second_list = []
data_1, data_2 = 0, 0
while True:
b = []
if sorted(first_list, reverse=True) == first_list:
break
data_1 = first_list.pop()
for i in range(len(first_list)-1):
data_2 = first_list.pop()
if data_1 > data_2:
pass
elif data_1 < data_2:
second_list.append(data_1)
elif data_1 == data_2:
second_list.append(data_1)
second_list.append(data_2)
data_1 = data_2
if len(first_list)>=1 and data_1 < first_list[0]:
first_list.append(data_1)
second_list.reverse()
first_list = first_list + second_list
count += 1
print(count)
编辑代码:
n = int(input())
input = [int(i) for i in input().split()]
count, t_length = 0, 0
cmp = input[0]
while True:
length = len(input)
for i in range(1, length):
if input[i] == -1:
t_length += 1
continue
if input[i] > cmp:
cmp = input[i]
input[i] = -1
else:
t_length += 1
cmp = input[i]
if t_length+1 == length:
break
count += 1
cmp, t_length = input[0], 0
print(count)
发布于 2016-05-13 02:13:53
排序是N log N
,您的数据结构在我看来是错误的。为什么不使用双链接列表,因为它的要求是它是最左边的邻居。你可以简单地取消对死去的指针的尊重。
https://stackoverflow.com/questions/37199445
复制相似问题