ARTS打卡第四周

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& 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++的多态

C++的多态情况十分的复杂且易错,我们需要十分了解多态实现的机理,才能在实际应用中不会出错。

Effective C++中有很多多态的情况,可以结合理解多态,实际工作中去实践多态的使用

Tip:学习至少一个技术技巧

本周没有学习新的技术技巧。

记录一下简单的windbg调试dump的步骤吧

1、!analyze -v 自动分析崩溃问题

2、 exce

3、 kn、kv

4、.frame xx 等位

windbg确实是很合适windows系统调试崩溃的工具,里面有着很多应用层使用不到的工具,一旦使用之后可以有一种豁然开朗的感觉。

PS:不过要说一句,内存越界是真的难处理,特别是无法复现的情况。希望之后工作中,能锻炼这方面的能力,加强 windbg、汇编、调试的能力,不仅仅局限在业务处理上的代码编写。

Share:分享一篇有观点和思考的技术文章

2020已经过去了,去年经历过疫情,经历过公司架构调整,很多带我入公司的人都找寻了新的岗位。接到了一个比较棘手的项目,而且该项目可能会一直需要后期的维护,感到很蛋疼。
不过仔细想想与之前的工作已经有了很大的变化,不再是阶到需求就开始写代码的阶段,开始思考应该如何构建程序的结构,接口的预留,等等。那些我人生中经历过的会设计系统的人啊,我想说一句你们是真正的牛,我也希望自己可以有这样的核心竞争力。

继续加油,不只是为了现在,还是为了未来。

你可能感兴趣的:(ARTS打卡第四周)