ARTS打卡20-部署vuepress博客

Algorithm做算法题,Review点评英文文章,Tip总结技术技巧,Share做技术分享。每周打卡一次,这就是ARTS打卡。

1. 做算法题

LeetCode 234. 回文链表

题目描述:请判断一个链表是否为回文链表。你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

示例

示例 1:输入: 1->2
输出: false
示例 2:输入: 1->2->2->1
输出: true

解题思路:如果数组L存储字符串的回文检查,很简单if L == L[::-1]就能判断是否回文。而题目中使用链表存储,最简单的思路是把链表转换为数组(python中是列表),再判断是否回文。这中方法要遍历整个链表,时间复杂度O(N),由于增加列表存储,空间复杂度O(N)。具体实现,参考代码1。题目还有进阶部分,要将空间复杂度降为O(1),也就是不能使用额外的存储空间,只能在链表上做文章。使用快慢指针,慢指针每次前进1步,快指针每次前进2步,一直到快指针知道链表尾部,慢指针正好指向链表中间位置。慢指针继续向后推移逆转后半部分链表。最后比较链表的前半部分和后半部分判断是否回文。具体实现,参考代码2。

解题代码1:

class Solution:
    def isPalindrome(self, head: ListNode) -> bool:
        L = []
        while head is not None:
            L += [head.val]
            head = head.next
        return L == L[::-1]

解题代码2:

class Solution:
    def isPalindrome(self, head: ListNode) -> bool:
        slow,fast,prev = head,head,None
        while fast is not None:
            slow = slow.next
            fast = fast.next.next if fast.next is not None else fast.next
        while slow is not None:
            slow.next, slow, prev= prev, slow.next, slow
        while head and prev:
            if head.val != prev.val:
                return False
            head = head.next
            prev = prev.next
        return True

2. 点评英文文章

阅读《Concise Guide to Databases》第二章,介绍了数据库发展的历程,数据库随着业务需求和技术更新的发展而发展出了关系型数据库、面向对象数据库、NoSQL数据库、数据仓库、云上数据库服务、空间数据库、时序数据库等等。文中详细描述了这些数据库的发展脉络,让你对数据库有更立体的认识。

3. 技术技巧

写正则表达式之后应该测试一下,避免出现逻辑漏洞,介绍一个在线正则匹配工具。这个工具不仅可以测试正则表达式,还可以生成邮箱、ip、手机号等正则表达式。

4. 技术分享

参考官网说明使用Vuepress+Vercel实现免费托管博客。注意先在本地跑通Vuepress,能正确访问页面。在配置Vercel时注意,Vercel访问github仓库权限要打开,配置编译生成时用npm init -y && npm i -D vuepress && npm run build,以在云端部署vuepress环境在跑页面出来。选择一文件夹public为输出,缺少的话会报错。代码参考我的github。

你可能感兴趣的:(ARTS打卡20-部署vuepress博客)