LeetCode笔记--数组(7)

1-bit and 2-bit Characters

一个数组bits由0、1组成,分为两种类型的元素,一种是单字符的0,另一种是双字符的10或11.判断数组bits的最后一位0是否是单字符的0.

思路:观察数组发现,从左往右看,只要遇到了1,那么该位与下一位必组成双字符。用这种方法将双字符剔除,直到数组的倒数第三位,此时除了数组的倒数两位没有被操作,前面的所有元素均为0。最后,判断数组的倒数第二位是0还是1,若为0,则倒数第一位的0为单字符;反之则为双字符。

class Solution:
    def isOneBitCharacter(self, bits):
        """
        :type bits: List[int]
        :rtype: bool
        """
        i = 0
        while i < (len(bits) - 2):
            if bits[i] == 1:
                bits.pop(i+1)
                bits.pop(i)
            else:
                i = i + 1
        if len(bits) == 1:
            return True
        elif bits[-2] == 1:
            return False
        else:
            return True

上述方法提交成功,但运行速度比较慢,所有看了一下别人运行速度快的方法。总体思路是类似的,但是代码精简了很多:从左到右遍历数组,如果遇到1则i跳到后两位,如果遇到0则i跳到后一位。这种遍历方法保证了每次i都落到字符的起点,遍历结束后,若i正好处于倒数第一位,说明最后一位是单元素的0,返回True.

i = 0
while i < len(bits) - 1:
    i += bits[i] + 1
return i == len(bits) - 1

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值