求数组b的最长不减子序列长度

        从数组的第0个元素开始,顺序考察数组的每个元素,当数组的全部元素都被考察后才能求出数组的最长不减子序列。

设数组为b,已考察了b[0]~b[i-1]的全部元素,求得当前最长的不减子序列长为k。当前正要考察b[i]是否会引起k值的增大,取决于b[i]是否会大于或者等于b[0]~b[i-1]中某个最长不减子序列的终元素。但需要注意,b[0]~b[i-1]中可能有多个长为k的不减子序列。很显然,在同样长度的不减子序列中,只要保留终元素最小的那个子序列就足够了。若用一个变量保存b[0]~b[i-1]中长度为k的不减子序列的最小终元素,这样在b[0]~b[i-1]中,是否有长度为k+1的不减子序列,取决于b[i]是否大于或者等于那个变量。

        当b[i]小于长度为k的不减子序列的最小的终元素的值时,此时不能通过与该序列组成长度为 k + 1的不减子序列;如果在b[0]~b[i-1]中有长度为k-1的不减子序列,且该子序列的值不大于b[i],这是因长度为k-1的不减子序列的终元素值小于等于b[i],就得到一个终元素更小(因为没有一个长度为 k 的不减子序列的终元素小于 b[i])的长度为k的不减子序列。

        为能发现上述可能,就得保留长度为k-1的不减子序列的终元素。依此类推,为保留长为k-2,k-3等的不减子序列,相应地也要为他们保留终元素的值。为此要引入一个数组,设为数组a,其第j个元素a[j]存放长为j的不减子序列的终元素的值。显然,数组a中的元素也是不减的序列。利用这个性质,在考察b[i]时,就能知道a中的哪个元素需要改变。从最长子序列至最短子序列顺序查找终元素小于等于b[i]的长为j的子序列,因b[i]大于等于长为j的不减子序列的终元素,找到了一个终元素更小的长为j+1的不减子序列,用b[i]作为长为j+1的子序列的终元素。当j的值为k时,已为长为k+1的子序列设定了终元素,这时最长不减子序列的长度k应增1。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值