2025.11.18 力扣每日一题

717.1比特与2比特字符

这个题一看就明白,写的时候又不明白了,思考了好一会才想通。。。

cpp 复制代码
class Solution {
public:
    bool isOneBitCharacter(vector<int>& bits) {
        int n = bits.size();
        int i = 0;
        // 遍历到倒数第二个元素为止(最后一个元素单独判断)
        while (i < n - 1) {
            // 遇到1,跳2位(2比特字符);遇到0,跳1位(1比特字符)
            i += (bits[i] == 1) ? 2 : 1;
        }
        // 若i最后等于n-1,说明最后一个元素是单独的比特字符
        return i == n - 1;
    }
};

一、题目里的 "特殊字符规则"

有两种字符,解码规则是:

  • 1 比特字符 :只能用 0 表示(占数组里的 1 个位置)。
  • 2 比特字符 :只能用 1011 表示(占数组里的 2 个连续位置)。

二、题目的要求

给你一个以 0 结尾 的二进制数组 bits,需要判断:把这个数组按照上面的规则 "完整解码" 后,最后一个被解码出来的字符,是不是 1 比特字符

三、用示例理解

示例 1:输入 bits = [1,0,0]

解码过程只能是:

  • 第 1 个元素是 1 → 必须和第 2 个元素组成 "2 比特字符"(10)。
  • 剩下的第 3 个元素是 0 → 单独组成 "1 比特字符"。

所以最后一个字符是 1 比特字符,输出 true

示例 2:输入 bits = [1,1,1,0]

解码过程只能是:

  • 第 1 个元素是 1 → 和第 2 个元素组成 "2 比特字符"(11)。
  • 第 3 个元素是 1 → 和第 4 个元素组成 "2 比特字符"(10)。

所以最后一个字符是 2 比特字符,输出 false

四、核心逻辑

因为数组是 "必须完整解码" 的,所以解码过程是从左到右、强制匹配规则的:

  • 遇到 1 → 必须 "吃掉" 当前和下一个元素(组成 2 比特字符)。
  • 遇到 0 → 只能 "吃掉" 当前元素(组成 1 比特字符)。
相关推荐
一起养小猫31 分钟前
《Java数据结构与算法》第四篇(二)二叉树的性质、定义与链式存储实现
java·数据结构·算法
乌萨奇也要立志学C++33 分钟前
【洛谷】贪心专题之哈夫曼编码 从原理到模板题解析
c++·算法
fie88899 小时前
NSCT(非下采样轮廓波变换)的分解和重建程序
算法
晨晖210 小时前
单链表逆转,c语言
c语言·数据结构·算法
沐雪架构师10 小时前
大模型Agent面试精选15题(第四辑)-Agent与RAG(检索增强生成)结合的高频面试题
面试·职场和发展
YoungHong199211 小时前
面试经典150题[072]:从前序与中序遍历序列构造二叉树(LeetCode 105)
leetcode·面试·职场和发展
im_AMBER11 小时前
Leetcode 78 识别数组中的最大异常值 | 镜像对之间最小绝对距离
笔记·学习·算法·leetcode
鼾声鼾语12 小时前
matlab的ros2发布的消息,局域网内其他设备收不到情况吗?但是matlab可以订阅其他局域网的ros2发布的消息(问题总结)
开发语言·人工智能·深度学习·算法·matlab·isaaclab
LYFlied12 小时前
【每日算法】LeetCode 25. K 个一组翻转链表
算法·leetcode·链表
Swizard12 小时前
别再迷信“准确率”了!一文读懂 AI 图像分割的黄金标尺 —— Dice 系数
python·算法·训练