leetcode热门100题总结

https://leetcode-cn.com/problemset/all/

右侧标签点进去有对算法类知识点的介绍和相关的题目,强烈推荐。

以下题目是挑选的经典题目和精简示意(不局限于算法):

算法:
(1)组合 对应题目:1.两数之和
(2)链表 对应题目:2.两数相加
(3)间隔 对应题目:908.最小差值 I
(4)滑动窗口 对应题目:    3.无重复字符的最长子串
(5)分治算法(Wait)、二分查找(Wait) 对应题目:    4.寻找两个有序数组的中位数
(6)中心扩展、动态规划(Wait) 对应题目:5.最长回文子串
(7)栈 对应题目:20.有效的括号
(8)递归、记忆化递归、动态规划、斐波那契数、Binets、斐波那契公式 对应题目:70.爬楼梯
(9)排序、中心、双指针 对应题目:    15.三数之和
(10)递归、迭代 对应题目:104.二叉树的最大深度
(11)递推 对应题目:38.报数
(12)快慢指针、哈希表 对应题目:141.环形链表
(13)二分查找 对应题目:35.搜索插入位置
(14)回溯 对应题目:17.电话号码的字母组合

非leetcode热门100题:
算法:
(1)深度优先搜索 对应题目:473.火柴棍摆正方形
(2)贪心算法 对应题目:452.用最少数量的箭引爆气球

滑动窗口:移动数据区域。
中心扩展:以中心向两侧延伸。

迭代:重复执行循环体。
递归:方法内部嵌套自己。
递推:由上一个得到下一个。
记忆化递归:递归中存在相同参数列表时只被运算一次。
斐波那契数列(黄金分割数列、兔子数列):1 1 2 3 5 8 13 ...

哈希表:存储唯一性数据。

双指针:移动两个指针。
二分查找:移动首尾指针,比较目标值与中间值。
快慢指针:指针前进步长不等。

深度优先搜索:深度优先的搜索方式。
回溯搜索:路径不优则退回选择其他路径。(回溯搜索是深度优先搜索的一种。回溯搜索不保留全部搜索树,即存在标记,称剪枝。)

动态规划:多阶段决策转化为一系列单阶段优决策。
贪心算法:每一步寻求最优。
分治算法:整个结构转化为多个最优子结构,独立求解再整合。

对比:
深度优先搜索、回溯搜索
分治算法、动态规划、贪心算法

多线程:
(1)
    // 对象锁
    private Object lock = new Object();
    synchronized (lock) {
        while (!firstFinished) {
            // 锁等待
            lock.wait();
        }
       
        // 个人操作
        secondFinished = true;
        // 通知其它线程可以抢锁了
        lock.notifyAll();
    }
(对象锁 对应题目:1114.按序打印)
(2)
(对象锁 对应题目:1115.交替打印FooBar)

数据库:
(1)inner join(内连接)、left join(左连接)、right join(右连接)、full join(全连接)
举例:select * from A inner join B on A.id = B.id;// A表id和B表id相同的记录
连接依据:on后的判断。
内连接:左右两表的连接依据交集。
左连接:左右两表的连接依据交集 + 左侧的非交集部分。
右连接:左右两表的连接依据交集 + 右侧的非交集部分。
全连接:左右两表的连接依据交集 + 左侧的非交集部分 + 右侧的非交集部分。
(对应题目:175.组合两个表)
(2)limit和offset:
举例:select * from A limit 1 offset 3;// A表的第二行、第三行、第四行记录
limit m, n等效于limit m offset n。
limit m, n是记录的m索引行开始,共计n行记录。索引从0开始。如果n为-1,表示一直偏移到最后一行记录都计算在内。
limit n等效于limit 0, n,即从第一行开始的n行记录。
asc和desc:
举例:select * from A order by id asc; // A表记录按id升序排列
asc表示升序,desc表示降序。
distinct:
举例:select distinct name from A; // 去掉重复的name
distinct可以对记录属性去重。
临时表:
临时查询的记录集。
ifnull(m, n):
如果m为null, 则返回n,否则返回m。m, n可以是临时表。
(对应题目:176.第二高的薪水)
(3)count(m):
m为1或*或属性名。
count(1):不在乎属性名和属性值,每一行为1,返回行数。
count(*):不在乎属性值,返回行数。
count(属性名):在乎属性值,返回此属性的值不为null的行数。
性能:如果记录有主键,count(主键名)最优。如果没有主键,是否只有一个属性,如果只有一个属性,count(*)最优,如果有多个,count(1)最优。
if(条件, 条件成立的值, 条件不成立的值):相当于条件判断表达式。
min(属性名):多条记录中属性的最小值。
(对应题目:177.第N高的薪水)

leetcode题解:https://github.com/azl397985856/leetcode
用动画的形式呈现解LeetCode题目的思路:https://github.com/MisterBooo/LeetCodeAnimation

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风铃峰顶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值