python初学者,没有很高级的操作,和上一篇java代码相似。
????????????
Java实现子序列最大和问题
说一下小白用pycharm写python心得吧。
(说实话,pycharm确实是个好软件,但是我用eclipse写Java写多了就不太习惯。因为pycharm对拼写的检查太仔细了。
比如说用一些单词的缩写组合组成一个变量名或者方法名最好在每个缩写之间加上下划线,不加也不会报错,只是pycharm会给你加上下划线,我看着就难受,无奈只能屈服,按照规则走。pycharm这样做对于新手确实不容易上手,但是也有利于让新手养成编写漂亮代码的习惯;
当初选择pycharm是因为pycharm的debug功能实在太好用了,比eclipse的好用很多,debug能更好的让我们理解一些逻辑上很难想通的代码,所以学会用debug还是一个优秀程序员的必备吧。)
下面直接上python代码:
????????????
**
1、整体说明
**
from random import choices
from time import time
#函数的入口(自定义的)
def control():
#初始化数组函数(参数为数组长度)
def init_array(array_num):
#根据用户键入选择调用的函数(参数为用户键入的函数编号)
def exec_func(n, a):
#蛮力法
def max_sub_sequence_sum1(a):
#蛮力法改良版
def max_sub_sequence_sum2(a):
#蛮力法究极改良版
def max_sub_sequence_sum3(a):
2、函数的入口(自定义的)
def control():
array_num = int(input("请输入序列长度:"))
func_num = int(input("请输入要使用的函数序号:(1-蛮力法;2-蛮力法改良版;3-蛮力法究极改良版)"))
l1 = init_array(array_num)
start_time = time()
l2 = exec_func(func_num, l1)
end_time = time()
print('最大和对应的元素为第', (l2[1] + 1), '到第', (l2[2] + 1), ' 对应的元素为:', l1[l2[1]], '和', l1[l2[2]])
print('子序列最大和为:', l2[0])
print('所用时间:', (end_time - start_time))
3、初始化数组函数
def init_array(array_num):
a = [num for num in choices(range(array_num), k=array_num)]
for i in choices(range(array_num), k=array_num // 2):
a[i] = a[i] * ((-1) ** i)
for i in range(array_num):
if i % 10 == 0 and i != 0:
print('\n')
if i == array_num-1:
print(a[array_num-1])
else:
print(a[i], end=',')
return a
4、根据用户键入选择调用的函数
def exec_func(n, a):
if n == 1:
return max_sub_sequence_sum1(a)
elif n == 2:
return max_sub_sequence_sum2(a)
elif n == 3:
return max_sub_sequence_sum3(a)
else:
print('输入错误!')
5、蛮力法
def max_sub_sequence_sum1(a):
max_sum = 0
for i in range(len(a)):
for j in range(i, len(a)):
this_sum = 0
for k in range(i, j + 1):
this_sum += a[k]
if this_sum > max_sum:
max_sum = this_sum
flag_start = i
flag_end = j
return [max_sum, flag_start, flag_end]
6、蛮力法改良版
def max_sub_sequence_sum2(a):
max_sum = 0
for i in range(len(a)):
this_sum = 0
for j in range(i, len(a)):
this_sum += a[j]
if this_sum > max_sum:
max_sum = this_sum
flag_start = i
flag_end = j
return [max_sum, flag_start, flag_end]
7、蛮力法究极改良版
def max_sub_sequence_sum3(a):
max_sum = 0
this_sum = 0
for j in range(len(a)):
i = 0
this_sum += a[j]
if this_sum > max_sum:
max_sum = this_sum
flag_start = i
flag_end = j
elif this_sum < 0:
i = j + 1
this_sum = 0
return [max_sum, flag_start, flag_end]
8、调用函数入口:
control()
本博客纯属本人笔记,技术含量低,欢迎大佬打扰指点。