挑选最大值子数组

今天写了个简单算法,挑选出满足条件的子数组:

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

 


版权声明:本文为zhuxingKevin原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。