当前位置: 首页 > article >正文

蓝桥杯例题七

🌟 "没有人能定义你的天际线,除了你自己。
别把光芒寄托在别人的灯盏里,你的火种就藏在胸膛深处——哪怕此刻只是微弱的星点,也足够燎尽荒原。所谓奇迹,不过是凡人用不肯低头的倔强,在命运岩层上凿出的裂缝。

🌊 潮汐有退时,但大海从未停止积蓄力量;日子会暗淡,可你眼里的光要永远清澈。与其等待风暴过去,不如学会在雨中起舞。那些被汗水浸透的清晨,那些与自我较劲的深夜,都在不动声色地重塑着你生命的密度。

🔥 记住:深渊也可以是梯田,只要你愿意种下勇气的种子;伤疤终将变成铠甲,当你学会与疼痛温柔对峙。别怕走得慢,所有抵达远方的人,最初都只是迈出了第一步。

🌠 把『不可能』拆开,里面藏着『可能』的密码;把『平凡』倒过来,便看见『非凡』的棱角。你要做的不是追赶太阳,而是让自己成为发光体——当千帆过尽,那个在风暴中依然挺直脊梁的身影,会比任何旗帜都更接近天空。

你生来就是自己的史诗,笔尖永远攥在掌心。 ✨

蓝桥杯官网蓝桥杯大赛 — 全国大学生TMT行业赛事

刷题力扣 (LeetCode) 全球极客挚爱的技术成长平台

目录

题目13:接雨水

背景描述:

输入格式:

输出格式:

样例输入:

样例输出:

解答过程:

Python代码实现及详细注释:

题目14:字符串解码

背景描述:

输入格式:

输出格式:

样例输入:

样例输出:

解答过程:

Python代码实现及详细注释:

总结


题目13:接雨水

背景描述:

给定 n 个非负整数表示每个柱子的高度,计算这些柱子能接住多少雨水。

输入格式:

第一行包含一个整数 n (1 <= n <= 10^5),表示柱子的数量。 第二行包含 n 个非负整数,表示每个柱子的高度。

输出格式:

输出一个整数,表示这些柱子能接住的总雨水量。

样例输入:
6
0 1 0 2 1 0 1 3 2 1 2 1
样例输出:
6
解答过程:

双指针法 是解决此类问题的有效方法。通过维护左右两个指针以及左右的最大高度来计算每个位置能接住的水量。

步骤:

  1. 初始化:
    • 设置两个指针 left 和 right 分别指向数组的两端,同时设置 left_max 和 right_max 分别记录左边和右边的最大高度。
  2. 遍历数组:
    • 当 height[left] < height[right] 时,更新 left_max 并计算当前位置的储水量;否则,更新 right_max 并计算右侧的储水量。
  3. 结果:
    • 累加所有位置的储水量即为最终答案。
Python代码实现及详细注释:
def trap(height):
    if not height:
        return 0
    
    left, right = 0, len(height) - 1
    left_max, right_max = height[left], height[right]
    water_trapped = 0
    
    while left < right:
        if height[left] < height[right]:
            left += 1
            left_max = max(left_max, height[left])
            water_trapped += left_max - height[left]
        else:
            right -= 1
            right_max = max(right_max, height[right])
            water_trapped += right_max - height[right]
    
    return water_trapped

# 示例输入
height = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]

# 调用函数并打印结果
print(trap(height))  # 输出: 6

题目14:字符串解码

背景描述:

给定一个经过编码的字符串,返回解码后的字符串。编码规则为: k[encoded_string],表示将 encoded_string 重复 k 次。注意,k 保证是一个正整数。

输入格式:

输入一行包含一个编码后的字符串 s,其中 s 只包含小写字母和数字 []

输出格式:

输出一行,表示解码后的字符串。

样例输入:
3[a]2[bc]
样例输出:
aaabcbc
解答过程:

是解决此类问题的有效方法。我们使用栈来存储当前正在构建的字符串和重复次数。

步骤:

  1. 初始化:
    • 创建一个空栈用于存储中间结果和重复次数。
  2. 遍历字符串:
    • 对于每一个字符,如果是数字,则更新当前的重复次数;如果是字母,则将其添加到当前字符串中;如果是 [,则将当前字符串和重复次数压入栈,并重置它们;如果是 ],则从栈中弹出上一次的结果,并根据重复次数构建新的字符串。
  3. 结果:
    • 最终栈中的结果或当前字符串即为解码后的字符串。
Python代码实现及详细注释:
def decode_string(s):
    stack = []
    current_num = 0
    current_string = ""
    
    for char in s:
        if char.isdigit():
            current_num = current_num * 10 + int(char)
        elif char == '[':
            stack.append((current_string, current_num))
            current_string = ""
            current_num = 0
        elif char == ']':
            prev_string, num = stack.pop()
            current_string = prev_string + num * current_string
        else:
            current_string += char
    
    return current_string

# 示例输入
s = "3[a]2[bc]"

# 调用函数并打印结果
print(decode_string(s))  # 输出: aaabcbc

总结

这两个题目分别涉及了不同的算法思想和技巧:

  • 接雨水 使用了双指针法,适用于处理需要动态调整边界条件的问题。
  • 字符串解码 使用了栈,这是一种常见的用于处理嵌套结构的方法,特别适合用于解析和构建复杂的数据结构。

http://www.kler.cn/a/532008.html

相关文章:

  • 计算机视觉-边缘检测
  • Linux进程状态及其转换
  • Vite:现代前端开发的利器
  • 【自然语言处理(NLP)】生成词向量:GloVe(Global Vectors for Word Representation)原理及应用
  • Redis常见命令
  • 使用Pygame制作“吃豆人”游戏
  • RocketMQ面试题:进阶部分
  • 给AI用工具的能力——Agent
  • Redis基础(二)——通用命令与五大基本数据类型
  • 排序算法--基数排序
  • Alibaba开发规范_MySQL索引规约:最佳实践与常见陷阱
  • 一篇关于高等数理统计结合机器学习论文的撰写(如何撰写?)
  • 响应式编程_01基本概念:前世今生
  • 防火墙安全策略实验
  • [vue.draggable.next]-Vue3中后台管理系统实现拖拽排序功能
  • Python面向对象编程:用对象思维构建数字世界
  • Linux:文件系统(软硬链接)
  • InfluxDB 2.0 到 3.0 技术架构演进与性能分析
  • 安全策略实验
  • 中国城商行信贷业务数仓建设白皮书(第一期:总体规划)
  • 力扣988. 从叶结点开始的最小字符串
  • 【深度学习】图像识别模型与训练策略
  • 63.视频推荐的算法|Marscode AI刷题
  • 时序论文37 | DUET:双向聚类增强的多变量时间序列预测
  • 小书包:让阅读更美的二次开发之作
  • Springboot整合Redis客户端