今天看到了这个贪心算法的摇摆序列,确实挺难的,自己就没有按照老师所用到的c语言代码编写,并且用了自己所能够理解的方式进行编写代码,代码实现起来有点多余,但是最终还是实现了,大家可以自己进行优化,这个是用来和小白一起学习的,哈哈!
题目如下:
实现思路如下:
c语言中实用一种转换思想进行实现的,如果满足哪种条件,就直接调用那个函数进行实现
结果如下图:
python实现代码如下
def sway_list(example):
num=0 #用于后面计数
num_0=2 #如果前一个数大于后一个数就将2添加数组中
num_1=3#如果前一个数小于后一个数就将3添加数组中
result_list=[]
if len(example)< 2:
print("example是一个摇摆序列,且摇摆序列的个数为{}".format(len(example)))
else:
for i in range(len(example)-1):
if example[i]>example[i+1]:
result_list.append(num_0)
else:
pass
if example[i]<example[i+1]:
result_list.append(num_1)
else:
pass
print(result_list)
for i in range(len(result_list)-1):
if result_list[i]==result_list[i+1]:
result_list[i]=100
print(result_list)
for result in result_list:
if result==100:
num+=1
print(result_list)
"""
为什么会加1?
因为前面两个数进行比对的时候,最后一个数无法和下一个数进行比较,所以没法得到结果,但是最后一个数也算是摇摆树之中的
所以需要加上一个数
"""
return len(result_list) + 1 - num
if __name__ == '__main__':
import time
start_time=time.time()
print("开始时间",start_time)
example=[1,17,5,10,13,15,10,5,16,8]
#example = [1, 2, 5, 10, 8, 15, 10, 11, 16, 8]
result=sway_list(example)
end_time=time.time()
print("结束时间",end_time)
print("一共有摇摆树{}".format(result))
print("一共花费的时间为:{}".format(end_time-start_time))