Skip to content

Instantly share code, notes, and snippets.

@azl397985856
Last active November 30, 2023 10:23
Show Gist options
  • Save azl397985856/92d2a0749e34c43b5ee4c27caa676cd1 to your computer and use it in GitHub Desktop.
Save azl397985856/92d2a0749e34c43b5ee4c27caa676cd1 to your computer and use it in GitHub Desktop.

思考步骤

  1. 未知量是什么?
  2. 已经数据是什么?
  3. 引入适当的符号,用哪个字母表示未知量?
  4. 联系上述未知量的条件是什么?
  5. 为了确定未知量是否需要辅助元素(引入几个新的符号。比如题目求 x^4 + 3x^2 = 15 最简单的引入 y = x^2,等价于 y^2 + 3y = 15)?
  6. 这是一个合理的题目吗?(条件是否足以确定未知量)
  7. 有没有可能将其转化为一个已经学习过的知识?(观察未知量,并尽量想出一道你所熟悉的具有相同或相似未知量的题目。每道题都按照这个步骤思考, 那么这个步骤 7 就不会很难)如果还是不能,不妨尝试变化,转化,修改题目,然后重新描述(比如简化或消除题目中的某几个未知量)。
  8. 你卡在了哪个环节?为什么卡到这里了?
  9. 如果实在无思路,尝试将题目的数据和答案列举出来分析规律,使用数学归纳来帮助你

面试步骤

  1. 明确题目,限定条件,确保它是一个可解的题目。
  2. 如果题目条件太宽泛,不足以确定未知量,你可以问问题。(可选)
  3. 用自己的语言复述一遍,确保理解没问题
  4. 说思路
  5. 写代码
  6. 做完题目自己代入例子过一下(自己多想几个例子)

2022-10-11

  • logn nlogn

image

  • n!

image

  • 2^n

递归的时间复杂度分析:

  1. 画递归树图
  2. 递推公式
     def backtrack(remain, comb, curr):
            if remain == 0:
                results.append(list(comb))
                return
             for i in range(n):
              for j in range(n):
                backtrack(remain - 1, comb, curr + 1)
             return       
        backtrack(target, [], 0)

T(remain, curr) = n^2 * T(remain-1, cur+1) T(remain-1, cur+1) =

        def backtrack(remain, comb, curr):
            if remain == 0:
                results.append(list(comb))
                return

            for i in range(curr, len(candidates)):
                if i > curr and candidates[i] == candidates[i - 1]:
                    continue
                pick = candidates[i]

                if remain - pick < 0:
                    break
                comb.append(pick)
                backtrack(remain - pick, comb, i + 1)
                comb.pop()

T(remain, cur) = n*T(remain, cur+1)

T(n) = T(n/2) + 1

2022-10-12

从简单思路入手, 从特殊入手(题目的 case) 再推广到一般

xxx 匹配都可以考虑用栈,或者递归

一句话描述枚举:把所有可能的解都列举一遍,并检查

一道题, 你至少有一种非常暴力的解,这个解也可以不通过测试用例。

T1:栈(队列),模拟与枚举

  1. 给你一个 nums, 让你求最大值(第二大,第三大), 平均值, 分析复杂度。

  2. 给你一个 nums, 让你求值 v 在数组中第几项,分析复杂度。

  3. 手动实现 pop(i), 时间复杂度

  4. https://leetcode.cn/problems/valid-parentheses/description/

  5. https://leetcode.cn/problems/walking-robot-simulation/

T2:树,双指针

考点:什么是树,如何用代码表示,遍历树。应用场景,相关算法和技巧。

作业:

  1. 两数和
  2. https://leetcode.cn/problems/minimum-size-subarray-sum/
  3. https://github.com/azl397985856/leetcode/blob/master/thinkings/binary-search-2.md

题型一:反转链表 将某个链表进行反转。题目描述参考:206. 反转链表

题型二:合并链表 将两条有序或无序的链表合并成一条有序链表。题目描述参考: 21. 合并两个有序链表

图的遍历以及之前的内容

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment