前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >华为秋招笔试真题解析

华为秋招笔试真题解析

作者头像
五分钟学算法
发布2023-09-24 20:09:21
2730
发布2023-09-24 20:09:21
举报
文章被收录于专栏:五分钟学算法五分钟学算法

大家好,我是吴师兄,关注我,每天更新大厂最新笔试题解析。

题目描述

小明和朋友玩跳格子游戏,有 n 个连续格子,每个格子有不同的分数,小朋友可以选择以任意格子起跳,但是不能跳连续的格子,也不能回头跳;

给定一个代表每个格子得分的非负整数数组,计算能够得到的最高分数

输入描述

给定一个数列,如: 1`` ``2 3 1

输出描述

输出能够得到的最高分,如: 4

备注

代码语言:javascript
复制
1 ≤ nums.length ≤ 100
0 <= nums[i] <= 1000

示例一

输入
代码语言:javascript
复制
1 2 3 1
输出
代码语言:javascript
复制
4
说明

选择跳第一个格子和第三个格子

示例二

输入
代码语言:javascript
复制
2 7 9 3 1
输出
代码语言:javascript
复制
12
说明
代码语言:javascript
复制
2`` ``+`` ``9`` ``+`` ``1`` ``=`` ``12

解题思路

注意,本题和LC198. 打家劫舍完全一致。

代码

代码语言:javascript
复制


# 输入分数数组
nums = list(map(int, input().split()))
# 获得格子数
n = len(nums)
# 如果长度为1,那么直接输出nums[0]
if n == 1:
    print(nums[0])
# 否则,进行dp过程
else:
    # 初始化长度为n的dp数组
    # dp[i]表示,考虑第i个格子时,能获得的最高分数
    dp = [0] * n
    dp[0] = nums[0]
    dp[1] = max(nums[0], nums[1])
    # 遍历剩余所有格子,
    # 动态转移方程为dp[i] = max(dp[i-1], nums[i] + dp[i-2])
    # 表示考虑dp[i]时,
    # 可以选择其前一个位置dp[i-1]的分数
    # 也可以选择其前两个位置dp[i-2]的分数加上nums[i]的分数
    for i in range(2, n):
        dp[i] = max(dp[i-1], nums[i] + dp[i-2])
    print(dp[-1])

时空复杂度

时间复杂度:O(N)

空间复杂度:O(N)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-09-23 20:02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 五分钟学算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
    • 输入描述
      • 输出描述
        • 示例一
          • 输入
          • 输出
          • 说明
        • 示例二
          • 输入
          • 输出
          • 说明
      • 解题思路
      • 代码
      • 时空复杂度
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档