首页 > 其他分享 >[Leetcode] 0717. 1 比特与 2 比特字符

[Leetcode] 0717. 1 比特与 2 比特字符

时间:2023-06-21 15:01:33浏览次数:44  
标签:字符 比特 Solution vector isOneBitCharacter bits Leetcode 0717

717. 1 比特与 2 比特字符

点击上方,跳转至leetcode

题目描述

有两种特殊字符:

  • 第一种字符可以用一比特 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]01

解法

根据题意,第一种字符一定以 0 开头,第二种字符一定以 1 开头。

我们可以对 bits 数组从左到右遍历。当遍历到 bits[i] 时,如果 bits[i]=0,说明遇到了第一种字符,将 i 的值增加 1;如果 bits[i]=1,说明遇到了第二种字符,可以跳过 bits[i+1](注意题目保证 bits 一定以 0 结尾,所以 bits[i] 一定不是末尾比特,因此 bits[i+1] 必然存在),将 i 的值增加 2。

上述流程也说明 bits 的编码方式是唯一确定的,遇到1跳过下一个字符,遇到0跳过本字符。看看是否落到最后,
因此若遍历到 i=n−1,那么说明最后一个字符一定是第一种字符。

时间复杂度:\(O(n)\),其中 \(n\) 是数组 \(bits\) 的长度。

空间复杂度:\(O(1)\)。

Python3

class Solution:
    def isOneBitCharacter(self, bits: List[int]) -> bool:
        i, n = 0, len(bits)
        while i < n - 1:
            i += bits[i] + 1
        return i == n - 1

# bits = [1, 0, 0]
bits = [1,1,1,0]
res = Solution().isOneBitCharacter(bits)
print(res)

C++

#include<iostream>
#include<vector>
using namespace std;


class Solution {
public:
    bool isOneBitCharacter(vector<int>& bits) {
        int i = 0, n = bits.size();
        while (i < n - 1) i += bits[i] + 1;
        return i == n - 1;
    }
};

int main(){

    // vector<int> bits = {1, 0, 0};
    vector<int> bits = {1,1,1,0};
    bool res = Solution().isOneBitCharacter(bits);
    cout << res << endl;
    return 0;
}

//g++ 711.cpp -std=c++11

标签:字符,比特,Solution,vector,isOneBitCharacter,bits,Leetcode,0717
From: https://www.cnblogs.com/yege/p/17496221.html

相关文章

  • [Leetcode] 0706. 设计哈希映射
    706.设计哈希映射点击跳转至leetcode题目描述不使用任何内建的哈希表库设计一个哈希映射(HashMap)。实现MyHashMap类:MyHashMap()用空映射初始化对象voidput(intkey,intvalue)向HashMap插入一个键值对(key,value)。如果key已经存在于映射中,则更新其对应的值v......
  • [LeetCode] 2090. K Radius Subarray Averages
    Youaregivena 0-indexed array nums of n integers,andaninteger k.The k-radiusaverage forasubarrayof nums centered atsomeindex i withthe radius k istheaverageof all elementsin nums betweentheindices i-k and i+k (i......
  • 每日一题力扣 1262 https://leetcode.cn/problems/greatest-sum-divisible-by-three/
    、 题解这道题目核心就算是要知道如果x%3=2的话,应该要去拿%3=1的数字,这样子才能满足%3=0贪心sum不够%3的时候,就减去余数为1的或者余数为2的需要注意两个余数为1会变成余数为2的,所以可能减去2个余数为1核心代码如下publicintmaxSumDivThreeOther(int[]nums){​  ......
  • LeetCode 周赛 350(2023/06/18)01 背包变型题
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]和[BaguTreePro]知识星球提问。往期回顾:LeetCode单周赛第348场·数位DP模版学会了吗?T1.总行驶距离(Easy)标签:模拟T2.找出分区值(Medium)标签:排序T3.特别的排列(Medium)标签:图、状态压缩、......
  • Leetcode Hot 100 & 239. Sliding Window Maximum
    参考资料:Python文档heapq部分考点:子串&[题干]1Input:nums=[1,3,-1,-3,5,3,6,7],k=32Output:[3,3,5,5,6,7]3Explanation:4WindowpositionMax5--------------------6[13-1]-353673......
  • 全球最大资管,贝莱德申请比特币ETF!加密社区却唱衰,为何?
       就在美国证交会(SEC)拳打币安、脚踩Coinbase的风头正劲之时,全球最大资管集团贝莱德(BlackRock)通过子公司iShares,向SEC提交了现货比特币ETF的文件申请。   根据申请文件,该ETF被命名为「iSharesBitcoinTrust」,其资产主要由代表该信托托管人持有的比特币组成,而「托管人」则是......
  • 图解LeetCode——437. 路径总和 III
    一、题目给定一个二叉树的根节点root ,和一个整数targetSum,求该二叉树里节点值之和等于targetSum的路径的数目。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二、示例2.1>示例1:【输入】root=[10,5,-3,3,2,null......
  • Leetcode Hot 100 & 560. Subarray Sum Equals K
    参考资料:考点:子串&[题干]1Input:nums=[1,1,1],k=22Output:2这道题说实话看得我一脸懵,第一时间想到的自然是双层循环遍历的一个$O(n^2)$的解法,也就是官方的解法一。但是使用这种解法会超时(Python语言是这样的,评论区有人提到了),我知道会扑该所以直接不......
  • 比特币,既是风险资产又是避险资产!能否成为资产配置的新风口?
       在美债违约风波刚刚惊险渡过,全球通胀局势暂不明朗的大背景下,投资者又该如何规避风险?加密资产是否值得纳入资产配置范围?比特币未来的走势会如何?   2008年,中本聪撰写了一份关于比特币的白皮书,当时正值美国遭遇了有史以来最严重的一场经济危机。因此从根本上说,这是一场基于传......
  • leetcode735行星碰撞vector模拟栈操作
    vector的基本操作:vector<int>v;v.back();//获取尾部数据v.front();//获取首部数据v.push_back(3);//在尾部加入数据3v.pop_back();//弹出尾部数据首先只有前一个行星向右走,后一个行星向左走才可能相撞。也就是一正一负的组合使用一个变量aliva记录当前行星是否会被销毁,......