有两种特殊字符:

第一种字符可以用一比特 0 表示
第二种字符可以用两比特(10 或 11)表示
给你一个以 0 结尾的二进制数组 bits ,如果最后一个字符必须是一个一比特字符,则返回 true 。

示例 1:

输入: bits = [1, 0, 0]
输出: true
解释: 唯一的解码方式是将其解析为一个两比特字符和一个一比特字符。
所以最后一个字符是一比特字符。
示例 2:

输入:bits = [1,1,1,0]
输出:false
解释:唯一的解码方式是将其解析为两比特字符和两比特字符。
所以最后一个字符不是一比特字符。

提示:

1 <= bits.length <= 1000
bits[i] 为 0 或 1

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/1-bit-and-2-bit-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题首先要读懂题意,然后需要逆序遍历。

逆序遍历优势在于不用遍历完全部数组。

关键点是只有 “0”,“10”,“11” 三种编码。

首先,观察数组最后一位,题干中说了,肯定是 0,但是我们不能确定是 “0” 还是 “10”,

所以采取的策略是:看看这个 0 前面有多少个**连续**的 1,

为什么是连续呢 ? 因为我们只要碰到 0 时,不管是 “0” 也好, “10” 也好,都代表着一个字符的结尾。

注意:没有 “1” 这个编码!我们只需看看连续的 1 个数是奇数还是偶数,

如果是偶数,代表这些连续的 1 都组成了“11”,

如果是奇数,代表最后一个“1”落单了,由于没有 “1” 这个编码,所以只能和最后一位 “0” 进行配对了。

bool isOneBitCharacter(int* bits, int bitsSize){int i;int cnt = 0;for (i = bitsSize - 2; i >= 0; i--) { // 求最后又多少个连续的1if (bits[i] == 1) {cnt++;} else {break;}}if (cnt % 2 == 0) {return true;} else {return false;}
}

【C语言刷LeetCode】717. 1 比特与 2 比特字符(E)相关推荐

  1. c语言编程 插队排身高,【C语言刷LeetCode】406. 根据身高重建队列(M)

    [ 假设有打乱顺序的一群人站成一个队列. 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数. 编写一个算法来重建这个队列. 注意: 总人数少于110 ...

  2. 【C语言刷LeetCode】883. 三维形体投影面积(E)

    [ 格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体. 每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上. 现在,我们查看这 ...

  3. 动态规划系列 之 股票相关问题 (C语言刷leetcode)

    2020-10-15 "知识的诅咒":一旦我们知道某样东西,我们就会发现很难想象不知道它的时候会是什么样子. 一.概述 leetcode中的股票相关的题目如下: 打开看很容易就知道 ...

  4. 【C语言刷LeetCode】2126. 摧毁小行星(M)

    [ 给你一个整数 mass ,它表示一颗行星的初始质量.再给你一个整数数组 asteroids ,其中 asteroids[i] 是第 i 颗小行星的质量. 你可以按 任意顺序 重新安排小行星的顺序, ...

  5. 【C语言刷LeetCode】235. 二叉搜索树的最近公共祖先(E)

    [ 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q ...

  6. 从零开始刷Leetcode——数组(697.717.724)

    文章目录 697. 数组的度 717. 1比特与2比特字符 724. 寻找数组的中心索引 697. 数组的度 给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数 ...

  7. sv队列和动态数组的区别_Go 刷 LeetCode 系列:经典(7) 设计双端队列

    设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k.insertFront():将一个元素添加到双端队列头部.如果操作成功返回 true ...

  8. 二叉搜索树的中序遍历为 递增序列_Go 刷 Leetcode 系列:恢复二叉搜索树

    二叉搜索树中的两个节点被错误地交换. 请在不改变其结构的情况下,恢复这棵树. 示例 1: 输入: [1,3,null,null,2] 1 / 3 \ 2输出: [3,1,null,null,2] 3 ...

  9. 教练我想学python_教练,我想学Python:(3)列表和切片,边学习边刷leetcode,三,与,边学边,LeetCode...

    系列 序:对Python一无所知的作者竟然开了这个系列- 学Python的第三天,Emmmm-我跳了,竟然在LeetCode中开始用Python3-学Python的一个私心当然是刷LeetCode舒服 ...

最新文章

  1. (转)使用Spring配置文件实现事务管理
  2. 如何利用PN结来测量温度?
  3. Android .so .aar..jar文件的使用方式
  4. future java 原理_Java线程池FutureTask实现原理详解
  5. CodeForces - 1325F Ehabs Last Theorem(dfs树找最大环)
  6. wbepack中output.filename和output.chunkFilename
  7. vi @-function
  8. 16 岁赚到 20 万美元,我的编程之路始于对代码的热爱
  9. 五、Mysql中JSON类型
  10. 「业务架构」商业模式画布
  11. FPGA实验2:ADDA测试
  12. [转]用Excel制作甘特图并管理项目
  13. 离散数学中求合取范式析取范式
  14. 随意创作立秋logo图
  15. MySQL---数据库基础入门
  16. 洛谷 P4379 [USACO18OPEN]Lemonade Line
  17. 自动化测试之单元测试框架
  18. SP3232串口上电瞬间发乱码问题
  19. 如何使用ANT在命令行进行编译和测试
  20. html收藏的链接,浏览器收藏夹中收藏的网页链接怎么导出来?

热门文章

  1. keil建立stm32工程即标准库函数目录结构
  2. Android Graphics Tests 程序学习01
  3. 计算机研究与发展 杂志,计算机研究与发展杂志
  4. 龙王传说古月_龙王传说最新话:真虐!古月疏远唐舞麟,却又忍不住偷瞄他
  5. 计算机考研考线代嘛,计算机考研大纲
  6. 手机怎么在日历上设置每月19号提醒?
  7. CN_以太网规格和传输介质@双绞线@基带同轴电缆
  8. Android读取手机ROM总大小方法
  9. 初学python选择哪个软件_初学 Python 需要安装哪些软件?
  10. Pycharm报错:\Scripts\activate.ps1 cannot be loaded because running scripts is disabled on this system