【思考题】连续子串问题

问题1:给出一串数字,有正数也有负数,现在要求你找出这一串数里面连续子串和最大的值为多少?
分析:这道题目是为了求解连续子串和的最大值,我们可以一遍循环就能找出解决方案,要求a[i],则首先判断a[i-1],如果a[i-1]>=0则a[i]+=a[i-1],如果a[i-1]<0则a[i]=a[i],这样一遍循环以后,我们找出a[1~n]里面最大值就是我们所需要求解的值
.
问题2:给出一串数字,有正数也有负数,现在要求你找出这一串数里面子串和(不要求连续)的最大值是多少?
分析:略微变化一下,改为不需要连续,好吧,这道题目我想的脑残了,大家纯属娱乐,如果不连续,我们直接找出所有正数相加就行了嘛,如果全是负数,找出最大的那个负数值,纠结,昨晚竟然没有想到这点儿,还把问题写到这儿,纠结~~~~
.
问题3:给出一串数字,有正数也有负数,现在要求你找出这一串数里面连续子串和的绝对值最大值是多少?(注意是绝对值)
分析:这道题目想了好久没有一下子想出来,思维定视厉害呀!和第一道题目不同的地方在于此处是要求求解绝对值,所以有时候几个负数相加取绝对值比几个正数相加的和大,所以采用问题一的策略是行不通的。所以我们可以让a[i]等于前i项和,再将a数组从小到大排序,排好序后,Max=max(abs(a[n]-a[1]),abs(a[n]),abs(a[1]));这样我们就求解出了最大值了。排好序后的a数组我们只知道它是从1到后面某一个数这一段的总和,用a[n]-a[1]代表的是这段数据可能的值最大,当然也有可能a[n],a[1]最大,所以我们要求解他们三者的最大值。感觉挺巧妙的一个方法,时间复杂度是O(nlogn),主要耗时就在排序了。
.
问题4:给出一串数字,有正数也有负数,现在要求你找出这一串数里面连续子串和的绝对值最小值是多少?(注意是绝对值)
分析:解法同问题三,稍微思考一下就明白了~~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值