当前位置:   article > 正文

[C++]Leetcode超高效刷题顺序及题目详解笔记(持续更新中)_c++刷题顺序

c++刷题顺序

一.前言

博主最近在LeetCode上用C++练习。一路走来踩过一些坑,做了一些总结和笔记,分享给需要的人。
LeetCode中文版:https://leetcode-cn.com/

二.介绍

LeetCode 是一个非常棒的平台,收集了许多公司的面试题目。相对其他平台而言,有着下面的几个优点:

  1. 题目全部来自业内大公司的真实面试不用处理输入输出
  2. 精力全放在解决具体问题上题目有丰富的讨论
  3. 可以参考别人的思路精确了解自己代码在所有提交代码中运行效率的排名
  4. 支持多种主流语言:C/C++,Python, Java可以在线进行测试,方便调试

人类解决问题的一般性的思维方法,总结起来主要有以下几种:

  1. 时刻不忘未知量。即时刻别忘记你到底想要求什么,问题是什么。(动态规划中问题状态的设定)
  2. 试错。对题目这里捅捅那里捣捣,用上所有的已知量,或使用所有你想到的操作手法,尝试着看看能不能得到有用的结论,能不能离答案近一步(回溯算法中走不通就回退)。
  3. 求解一个类似的题目。类似的题目也许有类似的结构,类似的性质,类似的解方案。通过考察或回忆一个类似的题目是如何解决的,也许就能够借用一些重要的点子,用特例启发思考。通过考虑一个合适的特例,可以方便我们快速寻找出一般问题的解。
  4. 反过来推导。对于许多题目而言,其要求的结论本身就隐藏了推论,不管这个推论是充分的还是必要的,都很可能对解题有帮助。

如果是大二大三、研一的同学,找工作还有很长一段时间,期间可以先打好编程的基础。先把C语言、数据结构学完之后再来刷题。如果是马上就要找工作的人,可以参考博主的笔记,里面记录的我的一些想法、代码流程和核心思路。

**大部分内容为个人想法见解,不妥之处请见谅,如有问题欢迎留言私信!!!**

刷题过程中,新手可以按照不同标签分类、同一类型从简单到难的顺序刷题,效率更高。以下按照算法思想数据结构分为两大类,每一类中有若干不同类型标签的题,按照从简单到难分类。

三.如何有效地写算法题

目的
持续做算法题的目的仍然是自身能力提升。可以继续细化成三点:

  1. 保持思维敏捷。非常重要,状态好才能保持对编程的热情。
  2. 对基础的数据结构、查找和排序保持熟练。能解决日常开发中的性能相关问题。
  3. 积累对问题域的探索。只有对问题域有足够的探索,才可能举一反三,迸发灵感。
    方法
    在刷题的过程中非常最容易产生挫败感,无法坚持。原因是,长时间的思考导致疲倦,多次积累的疲倦使得自己产生了 抵触记忆。以至于会下意识觉得做题就是 刻苦。如果每次做一件事最后留下的映像都是轻松愉快的,那么人就会越来越喜欢做此事,反之厌恶。所以为了能保持做题的兴趣,务必每次要主动给自己留下好的记忆。

目前 leetcode 上的题大致可分为几种类型:
对某种复杂规则的彻底解析,很有可能要构造状态机,充分考虑边界情况。 对某种数据结构及算法的应用。 对数学概念、遍历、动态规划等的综合应用。

四.leetcode题目

算法思想

双指针

1. 两数之和

2. 三数之和

3. 两数之和 II - 输入有序数组

4. 平方数之和

5. 反转字符串中的元音字母

6. 验证回文串

7. 验证回文字符串 Ⅱ

8. 合并两个有序数组

9. 环形链表

10. 通过删除字母匹配到字典里最长单词

排序

215. 数组中的第K个最大元素

347. 前 K 个高频元素

451. 根据字符出现频率排序

75. 颜色分类

贪心思想

455. 分发饼干

435. 无重叠区间

452. 用最少数量的箭引爆气球

406. 根据身高重建队列

121. 买卖股票的最佳时机

122. 买卖股票的最佳时机 II

二分查找

69. x 的平方根

744. 寻找比目标字母大的最小字母

540. 有序数组中的单一元素

278. 第一个错误的版本

153. 寻找旋转排序数组中的最小值

  1. 在排序数组中查找元素的第一个和最后一个位置

分治

50. Pow(x, n)

  1. 为运算表达式设计优先级

95. 不同的二叉搜索树 II

搜索

102. 二叉树的层序遍历

103. 二进制矩阵中的最短路径

279.完全平方数

127.单词接龙
DFS
695.岛屿的最大面积

200.岛屿数量

547.朋友圈

130.被围绕的区域

417.太平洋大西洋水流问题
Backtracking
17.电话号码的字母组合

93.复原IP地址

79.单词搜索
257.二叉树的所有路径
46.全排列
47.全排列 II
77.组合
39.组合总和
40.组合总和 I
216.组合总和 II
78.子集
90.子集 II
131.分割回文串
37.解数独
51.N皇后

动态规划

斐波那契数列
70.爬楼梯
198.打家劫舍
213.打家劫舍 II

矩阵路径

64.最小路径和
62.不同路径
数组区间
303.区域和检索 - 数组不可变
413.等差数列划分
分割整数
343.整数拆分
279.
91.解码方法
最长递增子序列
300.最长上升子序列
646.最长数对链
376.摆动序列
最长公共子序列
1143.最长公共子序列

0-1 背包

416.分割等和子集
494.目标和
474.一和零
322.零钱兑换
518. 零钱兑换 II
519. 单词拆分
377.组合总和 Ⅳ

股票交易

  1. 最佳买卖股票时机含冷冻期
    714 . 买卖股票的最佳时机含手续费
  2. 买卖股票的最佳时机 III
  3. 买卖股票的最佳时机 IV
    字符串编辑
  4. 两个字符串的删除操作
  5. 编辑距离
    650 .只有两个键的键盘

数学

204.计数质数
504. 七进制数
405. 数字转换为十六进制数
168. Excel表列名称
172. 阶乘后的零
67. 二进制求和
462. 最少移动次数使数组元素相等 II
169多数元素

数据结构

链表

206.反转链表

160.相交链表

21.合并两个有序链表

83.删除排序链表中的重复元素

19.删除链表的倒数第N个节点

24.K 个一组翻转链表

445.两数相加II

234.回文链表

725.分隔链表

328.奇偶链表

98.验证二叉搜索树

递归

22.括号生成

  1. 二叉树的最大深度
    110.平衡二叉树

543.二叉树的直径

226. 翻转二叉树

617. 合并二叉树

112.路径总和

437. 路径总和 III

572. 另一个树的子树

101. 对称二叉树

111. 二叉树的最小深度

112. 路径总和

404. 左叶子之和

687. 最长同值路径

337. 打家劫舍 III

671. 二叉树中第二小的节点

124. 二叉树中的最大路径和

744.寻找比目标字母大的最小字母

层次遍历
637. 二叉树的层平均值
513. 找树左下角的值
前中后序遍历
144. 二叉树的前序遍历
145. 二叉树的后序遍历
94. 二叉树的中序遍历
BST.
669. 修剪二叉搜索树

230. 二叉搜索树中第K小的元素

Convert BST to Greater Tree.

235二叉搜索树的最近公共祖先
236.二叉树的最近公共祖先
108. 将有序数组转换为二叉搜索树
109. 有序链表转换二叉搜索树
653. 两数之和 IV - 输入 BST
530. 二叉搜索树的最小绝对差
501. 二叉搜索树中的众数
208. 实现 Trie (前缀树)
677. 键值映射

栈和队列

232.用栈实现队列
225.用队列实现栈
155.最小栈
20.有效的括号
739.每日温度
503.下一个更大元素 II

哈希表

217.存在重复元素

594. 最长和谐子序列

128. 最长连续序列

字符串

242.有效的字母异位词

409.最长回文串

205.同构字符串

647.回文子串

9.回文数

696.计数二进制子串

数组与矩阵

283.移动零
566.重塑矩阵
485.最大连续1的个数
240.搜索二维矩阵 II
378.有序矩阵中第K小的元素
645 .错误的集合
287.寻找重复数
667.优美的排列 II
697.数组的度
565.数组嵌套
769.最多能完成排序的块

785.判断二分图
207. 课程表
208. 课程表 II
位运算
461. 汉明距离
136. 只出现一次的数字
268. 丢失的数字
260. 只出现一次的数字 III
190. 颠倒二进制位
231. 2的幂
342. 4的幂
693. 交替位二进制数
476. 数字的补数
371. 两整数之和
318. 最大单词长度乘积
338. 比特位计数

如果这篇文章对你有用的话,请点击下方的一键三连,感谢感谢!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/395361
推荐阅读
相关标签
  

闽ICP备14008679号