ARTS打卡第四周
Algorithm:每周至少做一个 leetcode 的算法题
717. 1比特与2比特字符
有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。
现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。
示例 1:
输入:
bits = [1, 0, 0]
输出: True
解释:
唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。
示例 2:
输入:
bits = [1, 1, 1, 0]
输出: False
解释:
唯一的编码方式是两比特字符和两比特字符。所以最后一个字符不是一比特字符。
注意:
1 <= len(bits) <= 1000.
bits[i] 总是0 或 1.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/1-bit-and-2-bit-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码:
bool isOneBitCharacter(vector<int>& bits)
{
int count = bits.size();
if (count == 1)
{
if (bits[0] == 0)
{
return true;
}
}
if (count == 2)
{
if (bits[1] == 0 && bits[0] != 1)
{
return true;
}
}
if (count >= 3)
{
if (bits[count - 1] == 0)
{
if (bits[count - 2] == 0)
{
return true;
}
int number = 0;
while (true)
{
if (count - 2 - number >= 0)
{
if (bits[count - 2 - number] == 1)
{
number++;
}
else
{
break;
}
}
else
{
break;
}
}
if (number % 2 == 0)
{
return true;
}
}
}
return false;
}
解题思路:
归纳返回true的情况
bits长度为1时,bits[0]为一比特字符,返回true;
bits长度为2时,bits全为0时,返回true;
bits长度>=3时,bits后两位为0 返回true,为10时,判断连续1的个数,偶数个返回true,奇数个返回false。
官方解答:
public boolean isOneBitCharacter(int[] bits)
{
int i = bits.length - 2;
while (i >= 0 && bits[i] > 0) i--;
return (bits.length - i) % 2 == 0;
}
作者:LeetCode
链接:https://leetcode-cn.com/problems/1-bit-and-2-bit-characters/solution/1bi-te-yu-2bi-te-zi-fu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
官方答案代码更加的简洁,极限情况下规律寻找较为清晰。
Review:阅读并点评至少一篇英文技术文章
C++的多态情况十分的复杂且易错,我们需要十分了解多态实现的机理,才能在实际应用中不会出错。
Effective C++中有很多多态的情况,可以结合理解多态,实际工作中去实践多态的使用
Tip:学习至少一个技术技巧
本周没有学习新的技术技巧。
记录一下简单的windbg调试dump的步骤吧
1、!analyze -v 自动分析崩溃问题
2、 exce
3、 kn、kv
4、.frame xx 等位
windbg确实是很合适windows系统调试崩溃的工具,里面有着很多应用层使用不到的工具,一旦使用之后可以有一种豁然开朗的感觉。
PS:不过要说一句,内存越界是真的难处理,特别是无法复现的情况。希望之后工作中,能锻炼这方面的能力,加强 windbg、汇编、调试的能力,不仅仅局限在业务处理上的代码编写。
Share:分享一篇有观点和思考的技术文章
2020已经过去了,去年经历过疫情,经历过公司架构调整,很多带我入公司的人都找寻了新的岗位。接到了一个比较棘手的项目,而且该项目可能会一直需要后期的维护,感到很蛋疼。
不过仔细想想与之前的工作已经有了很大的变化,不再是阶到需求就开始写代码的阶段,开始思考应该如何构建程序的结构,接口的预留,等等。那些我人生中经历过的会设计系统的人啊,我想说一句你们是真正的牛,我也希望自己可以有这样的核心竞争力。
继续加油,不只是为了现在,还是为了未来。