717. 1比特与2比特字符题解
题目来源:717. 1比特与2比特字符
2022.02.20 每日一题
每日一题专栏地址:LeetCode 每日一题题解更新中❤️💕
今天的题目是,存在两种字符
- 第一种字符是一个比特
0
- 第二种字符是由 1 开头的两个比特组成
10
或11
判断数组中的最后一位的 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)