挑选最大值子数组

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值