墨菲定律的好兄弟,俊介定律

「俊介定律」,是一种心理学效应,由俊介 · 萧(Alrcly Suzuki)提出的。其根本内容是:糟糕的事一旦发生,更多糟糕的事就会接踵而至。

Focus

糟糕的事一旦发生,人的心情就会变得很焦躁,人在焦躁的心态下就会做更多错误的事情。本周一开始各种倒霉的事就不断的发生。虽然因为知道「俊介定律」,所以有所预期,但是还是挺让人难受的,好在慢慢的我也缓解过来了。这次水逆我获得的经验是,要想办法把一件糟糕的事转换成确辛的事,转化的过程可能只是自欺欺人,但是安慰剂效应能缓解更多糟糕的事发生。

在所有好友里我可能是目前收入最低的。富二代、体制内的好友不必多说,创业的好友有创业的艰辛,但是收入还是可观的。但即使是同样起跑线的好友,我依然是落后的。一个在我后面入行编程的大学同学,不到一年的时间,已经一跃成为项目经理了。通过和他的谈话,我能感觉到自己和他的差距,他在入职的时候就有很明确的职业规划目标,而我却是浑浑噩噩的度过每一天。我约了他这周末小聚一下,希望能从他的经历里获取到更多对我有价值的经验。

虽然想短期内通过 PHP 获得一份更好的工作,但是 PHP 已经到了连发糕这样的圈外人士都知道没前途的地步了,所以我能选的只能是 Java。我未来的职业路线,得要好好规划一下了。

Review

算法训练营 · 体验课

学完了「算法训练营 · 体验课」感觉还挺有收获的,对「复杂度分析」、「数组、链表、跳表」、「 树、二叉树、二叉搜索树」和「递归」都有了一些基本的认识。课程里的 Homework 够我在 LeetCode 上学习一周的时间了,至于课程的总结得找个时间做出 Anki。

透视HTTP协议

本周「透视HTTP协议」 没有学习新的知识,只是把之前学习的内容整理后做成了 Anki。限时的「算法训练营 · 体验课」已经学完了,接下来的主要目标是完成「透视HTTP协议」 的相关课程。

算法 Algorithm

跟着「算法训练营 · 体验课」完成了 LeetCode 的「移动零」、「爬楼梯」、「括号生成」三道算法题目。

移动零

这个题目是对数组的操作,对数组的操作尽力避免非头尾的删除、插入操作,因为这些会移动数组的元素,从而增加时间复杂度。

# 执行用时 136 ms
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        for i in nums:
            if i == 0:
                nums.remove(0)
                nums.append(0)
# 执行用时 48 ms
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        j = 0
        for index in range(len(nums)):
            if nums[index] != 0:
                nums[j],nums[index] = nums[index],nums[j]
                j += 1
        return nums

爬楼梯

本质上就是斐波拉契数列

# 暴力递归  
class Solution:
    def climbStairs(self, n: int) -> int:
        if n==0 or n==1:
            return 1
        return self.climbStairs(n - 1) + self.climbStairs(n - 2)
# 动态规划
class Solution {
    public int climbStairs(int n) {
        int p = 0, q = 0, r = 1;
        for (int i = 1; i <= n; ++i) {
            p = q; 
            q = r; 
            r = p + q;
        }
        return r;
    }
}

括号生成

最简单的解法是直接写一个完整递归树再修剪树,更合理的方式是生成的同时修剪树。

class Solution:
    strList = []

    def generateParenthesis(self, n: int) -> List[str]:
        self.strList = []
        self.generate(0, 0, n, '')
        return self.strList

    def generate(self, left, right, n, s):
        if left == n and right == n:
            self.strList.append(s)
            return
        if left < n:
            self.generate(left + 1, right, n, '%s(' % s)
        if right < left:
            self.generate(left, right + 1, n, '%s)' % s)

观察到一个有趣的点。其他语言的用户都是想着怎么提高性能,Python 用户的画风就不一样了,全是搞奇技淫巧减少代码行数的。

全部评论(0)
必填
必填,不公开
我信任你,不会填写广告链接
收起