Task 2 Session

Cs, Go!

||最后更新: 2025-8-12|

2.1 - Initialisation

1️⃣
#简单理解
查看思路
将Starting_tiptop 储存在一个变量里面 (这里称为 当前显示)。 在查看的时候输出当前显示
就简单的赋值就好了,没有过多要说的。

2.2 - Navigating

1️⃣
#最优解 #视频演示
查看思路
通过两个stack分别储存父页面以及子页面。(每个Tiptop这里用”页面”表示)
notion image
其中 父页面 遵守规则
  • 每当 访问一个新页面的时候,父页面添加当前页面
其中 子页面 遵守规则
  • 每当 访问父页面的时候,子页面添加当前页面
  • 每当 访问一个新页面的时候,子页面清空

过程演示

(推荐开倍速食用)

代码部分

跟着两个栈(stack) 遵守的去走,就很容以实现了。
注意事项:
  • 父页面为空的时候向右滑动直接返回当前页面
  • 子页面为空的时候向左滑动直接返回当前页面

2.3 - Blueness

1️⃣
#简单理解
查看思路
题目中明确声明 get_blueness 需要达到 ,然而光是读每个蓝色的时间复杂度就已经达到了,所以最简单的处理方法是 - 不要在 get_blueness 中处理。

大致思路

好的知道了大致思路,来看一下函数里面如何实现

如何更新当前蓝量

1. 获取当前tiptop 蓝量

问题1

循环遍历每个Tiptop,使用 bit_vector_set 数据结构来快速计数,但是注意考虑 bit_vector_set 的时间复杂度。
bit_vector_set 时间复杂度 ✅ 添加速度为 ✅ 查询元素是否存在 速度为 ⚠️ 查看尺寸速度为 - 世界上最慢的东西
解决方法 - 手动设置一个计数器,每次添加时如果添加成功则计数器+1

问题2

每个像素点的蓝色取值范围为 ,而 bit_vector_set 不接受 作为输入。
解决方法 - 让每个蓝色 + 1,从而让蓝色取值范围变为 ,完美解决。

2. 获取蓝量中位数

使用sorted_list 来储存所有出现过的蓝量,利用sorted_list的性质 - 自动排序。
找到中间 一位/两位 找到median。

伪代码

2.4 - Pinching Out

1️⃣
#视频演示 #有难度
查看思路
整个题目的难点在于如何不使用递归,使用for循环嵌套来实现提亮的扩散效果。
来看看我的逻辑展示

伪代码

主函数

垂直方向扩散(起点, 步数)

水平方向扩散(起点, 步数)

  1. 核心思想 = 从中心点出发 → 递减强度 → 向四个方向扩散 → 在扩散过程中再向垂直/水平方向分支扩散
  1. 本质上是一个 二维十字形扩散+边扩散 的模式

2.5 - Posting Comments

1️⃣
#简单理解
查看思路

逻辑步骤

  1. 内部方法 scuess()
      • 调用 remote_server.post_comment() 上传评论数据
      • 返回 True 表示成功
  1. 特殊情况处理
      • 如果评论长度为 1 → 直接调用 scuess() 返回成功
  1. 拆分评论长度
      • half = comment_length // 2
      • is_odd = comment_length & 1(判断是否奇数长度)
  1. 使用栈保存前半部分评论字符
      • 创建容量为 half 的栈
      • 循环 half 次,将评论前半部分字符压入栈中
  1. 比较后半部分字符
      • 从后半部分的第一个字符开始(如果是奇数长度则跳过中间字符)
      • 循环直到评论结尾:
        • 弹出栈顶元素与当前字符比较
        • 若不相等 → 返回 False(非对称)
  1. 全部匹配成功
      • 调用 scuess() 上传评论并返回 Tru
Loading...