【华为OD】D卷真题100分:最长连续子序列 python代码实现[思路+代码]

【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript

【华为OD】2024年C、D卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript-CSDN博客

JS、python、Java、C++、C代码:

【华为OD】D卷真题100分:最长连续子序列 JavaScript代码实现[思路+代码]-CSDN博客

【华为OD】D卷真题100分:最长连续子序列 python代码实现[思路+代码]-CSDN博客 

【华为OD】D卷真题100分:最长连续子序列 Java代码实现[思路+代码]-CSDN博客 

【华为OD】D卷真题100分:最长连续子序列 C++代码实现[思路+代码]-CSDN博客 

【华为OD】D卷真题100分:最长连续子序列 C语言代码实现[思路+代码]-CSDN博客 

题目描述:

有N个正整数组成的一个序列。给定整数sum,求长度最长的连续子序列,使他们的和等于sum,返回此子序列的长度,如果没有满足要求的序列,返回-1。

输入描述

序列:1,2,3,4,2

sum:6

输出描述

序列长度:3

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

1,2,3,4,2
6

输出

3

说明

解释:1,2,3和4,2两个序列均能满足要求,所以最长的连续序列为1,2,3,因此结果为3

示例2

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

1,2,3,4,2
20

输出

-1

说明

解释:没有满足要求的子序列,返回-1

备注

输入序列仅由数字和英文逗号构成,数字之间采用英文逗号分隔;

序列长度:1 <= N <= 200;

输入序列不考虑异常情况,由题目保证输入序列满足要求。

     34334                                                         
                                                            
              +---+                                                          
  3            |   |       ++                               +       +---|   
  |           |   | 3      +                6               +  |   +   |        +
  |      +     |   |       +         +                      +    |  +   |       +
  |      +    |   +---+    +        +        +++++          +   +  +   |        +
  |      +    | +      |   +   +----+        |   |          +   +  +   |        +
  |      +  3 | +      |   +   +    +      2 |   |     2    +   +  +   |        +
  |      +    | +      |   +   +    +        |   |          +   +  +   |        +
  |      +---+ +     |    |  |    +    ----+   |   +---+    |  |  +   |         +
  |      |     +     |    |  |    +    |       |   |   |    |  |  +   |         +
  |    1 |     +     | 8  |  |    +  1 |   |    | 1 |   | 1 |   |  +   |        +
  |      |     +     |    |  |    +    |   |    |   |   |   |   |  +   |        +
  |  +---+     +     +---+   |    ++---+    ++   +---+   +---+   |  +   |        +
  |  |         +         |   |    |         ++              |   |  |+   |        +
  |0 |         +         | 0 |  0 |         ++              | 0 |  |+   |        +
  |  |         +         |   |    |         ++              |   |  |+   |        +
  +---+         +          +-------+                       +---+| +|+   |        +
                +                                                    +   |        +
    0   1   2   3   4   5   6   7   8   9  10  11  12 + v:    w  u m    u 1 0 2 4
 

题目解析:

        按逻辑来加上动态规划处理即可

代码实现:

def get_max(nums, target):
    max_len = 0
    dp = [0] * len(nums)
    for i in range(1, len(nums)):
        dp[i] = dp[i - 1] + nums[i]
        for j in range(i):
            if dp[i] - dp[j] == target and max_len < i - j:
                max_len = i - j
    return max_len


if __name__ == '__main__':
    ss = input()
    target = int(input())
    nums = [int(i) for i in ss.split(",")]
    nums.insert(0, 0)
    res = get_max(nums, target)
    if res == 0:
        print(-1)
    else:
        print(res)
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五木大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值