蓝桥杯例题七

🌟 "没有人能定义你的天际线,除了你自己。

别把光芒寄托在别人的灯盏里,你的火种就藏在胸膛深处------哪怕此刻只是微弱的星点,也足够燎尽荒原。所谓奇迹,不过是凡人用不肯低头的倔强,在命运岩层上凿出的裂缝。

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

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

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

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

蓝桥杯官网蓝桥杯大赛 --- 全国大学生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. 初始化:
    • 设置两个指针 leftright 分别指向数组的两端,同时设置 left_maxright_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

总结

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

  • 接雨水 使用了双指针法,适用于处理需要动态调整边界条件的问题。
  • 字符串解码 使用了栈,这是一种常见的用于处理嵌套结构的方法,特别适合用于解析和构建复杂的数据结构。
相关推荐
CoderYanger3 小时前
优选算法-双指针:2.复写零
java·后端·算法·leetcode·职场和发展
Kent_J_Truman7 小时前
【第几小 / 分块】
算法·蓝桥杯
我命由我1234517 小时前
Photoshop - Photoshop 工具栏(4)套索工具
经验分享·笔记·学习·ui·职场和发展·职场·photoshop
我命由我1234517 小时前
Photoshop - Photoshop 更改图像大小
笔记·学习·ui·职场和发展·职场发展·photoshop·ps
Asmalin21 小时前
【代码随想录day 35】 力扣 416. 分割等和子集
算法·leetcode·职场和发展
xxxmmc1 天前
Leetcode 100 The Same Tree
算法·leetcode·职场和发展
Asmalin1 天前
【代码随想录day 32】 力扣 509.斐波那契数列
算法·leetcode·职场和发展
235161 天前
【LeetCode】46. 全排列
java·数据结构·后端·算法·leetcode·职场和发展·深度优先
Miraitowa_cheems1 天前
LeetCode算法日记 - Day 62: 黄金矿工、不同路径III
数据结构·算法·leetcode·决策树·职场和发展·深度优先·剪枝
小南家的青蛙2 天前
LeetCode第51题 - N 皇后
算法·leetcode·职场和发展