今天写了个简单算法,挑选出满足条件的子数组:
1.子数组内的值相加总和最大
(用一个start来定位子数组的起点,输出从起点到循环的点的子数组信息)
def sub_array(arr):
start, total_num, result_arr = 0, arr[0], []
result_num = arr[0]
for i in range(1, len(arr)):
if arr[i] > arr[i] + total_num:
start = i
total_num = arr[i]
else:
total_num = arr[i] + total_num
if total_num > result_num:
result_num = total_num
result_arr = arr[start:i + 1]
print(result_num)
print(result_arr)
sub_array([1, 5, -10, 2, 1, -3, 2, 6, -3, 1])
------结果------
8
[2, 1, -3, 2, 6]
这个思路也可以简单拓展下变成找出最大不重复字符串
def sub_str(s):
dic = {}
start, max_len, result_str = 0, 0, ""
for i, x in enumerate(s):
if x in dic:
start = dic[x] + 1
dic[x] = i
else:
dic[x] = i
if i - start + 1 > max_len:
max_len = i - start + 1
result_str = s[start:i + 1]
return result_str