【数据结构与算法】LeetCode:day1
前言
寒假刚刚过去,暑假正式开始!
开始刷 LeetCode 的第一天,计划每天两小时,从简单题开始,到刷完为止(刷不完就一直刷~~~)
1. 一维数组的动态和
2. 拥有最多糖果的孩子
3. 重新排列数组
我的思路:
- 引入一个空数组用于存放结果,使用两个指针分别指向原数组和新数组
- 指向原数组的指针每次加2,指向新数组的指针每次加1
我的代码:
1 | class Solution { |
执行结果:
时间复杂度为 O(n) ,然而只击败26%,有改进空间!
更好的方法:
1 | class Solution { |
两个指针是二倍的关系,完全可以用一个指针代替两个指针!
4. 1比特与2比特字符
我的思路:
设置布尔型变量 flag 来标记最后一个字符是否为一个比特,动态的进行判断
若字符数组长度为 1 则直接返回 true
否则进行判断:
- 若上一次判断的结果是 false (两比特) ,则当前字符必定为一比特
- 若上一次判断结果为true (一比特):
- 若上一个字符为 0 ,则当前字符必定为一比特
- 若上一个字符为 1 ,则当前字符必定为两比特
返回 flag
我的代码:
1 | class Solution { |
执行结果:
显然,在运行时间和内存消耗上都仍有较大改进空间!
康康大佬们是怎么做的
更好的方法:
我们可以对
bits
数组从左到右扫描来判断最后一位是否为一比特字符。当扫描到第 i 位时,如果bits[i] = 1
,那么说明这是一个两比特字符,将 i 的值增加 2。如果bits[i] = 0
,那么说明这是一个一比特字符,将 i 的值增加 1。如果 i 最终落在了
bits.length − 1
的位置,那么说明最后一位一定是一比特字符。作者:LeetCode
链接:https://leetcode-cn.com/problems/1-bit-and-2-bit-characters/solution/1bi-te-yu-2bi-te-zi-fu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1 | class Solution { |
妙啊!
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.