LeetCode 717. 1比特与2比特字符题解

717. 1比特与2比特字符题解

题目来源:717. 1比特与2比特字符

2022.02.20 每日一题

每日一题专栏地址:LeetCode 每日一题题解更新中❤️💕

今天的题目是,存在两种字符

  • 第一种字符是一个比特0
  • 第二种字符是由 1 开头的两个比特组成1011

判断数组中的最后一位的 0 是否是第一种字符

法一:正序遍历

第一种方法就比较容易想到了,就直接正序遍历数组,直到遍历到最后判断末尾的 0 是属于第一种字符0,还是第二种字符10,就能得到最后的答案

class Solution {
public:
    bool isOneBitCharacter(vector<int> &bits) {
        int i;
        for (i = 0; i < bits.size() - 1; i++) {
            if (bits[i] == 1)
                i++;
        }
        return i == bits.size() - 1;
    }
};
class Solution {
    public boolean isOneBitCharacter(int[] bits) {
        int i;
        for (i = 0; i < bits.length - 1; i++) {
            if (bits[i] == 1) i++;
        }
        return i == bits.length - 1;
    }
}
  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1)
法二:倒序遍历

第二种方法,从后向前遍历数组,设置一个变量 index ,将 index 设置为除最后一位以外为 0 的位置,如果不存在则默认置为 -1

在 index 与 n - 1 (n为数组的长度) 之间所有的数字均为 1

而 index 所在位不论是第一种字符还是第二种字符,index + 1 位的这个字符一定是以 1开头的第二种字符,这时候只需要统计 [index + 1,n - 2] 这个范围内有多少个1存在就成功了,而这个也很好计算,因为这个范围内所有的数字都是1,即为 n - index -2,只需要判断n - index -2是否是偶数就能得出正确答案啦!

class Solution {
public:
    bool isOneBitCharacter(vector<int> &bits) {
        int index = bits.size() - 2;
        while (index >= 0 && bits[index] == 1)
            index--;
        return index % 2 == 0;
    }
};
class Solution {
    public boolean isOneBitCharacter(int[] bits) {
        int index = bits.length - 2;
        while (index >= 0 && bits[index] == 1)
            index--;
        return index % 2 == 0;
    }
}
  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值