
数据结构与算法
文章平均质量分 96
剑指offer、LeetCode
一颗苹果OAOA
华科研一 / 深度学习 / 自营公众号【OAOA】
展开
-
【数据结构】Leetcode——贪心算法 经典题
开始之前学习一个单词热热身: invigorating 英[ɪnˈvɪɡəreɪtɪŋ] adj. 提神的; 令人精力充沛的; 振奋精神的; v. 使生气勃勃; 使精神焕发; 使蒸蒸日上; 使兴旺发达;贪心的本质是选择每一阶段的局部最优,从而达到全局最优。贪心算法并没有固定的套路。说白了就是常识性推导加上举反例。贪心算法一般分为如下四步:将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解1 分发饼干(455.原创 2021-01-17 23:17:47 · 1059 阅读 · 0 评论 -
【数据结构】十大排序算法—— C++实现<全>
关于时间复杂度平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序;O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。关于稳定性稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。名词解释:n:数据规模k:"桶"的个数In-place:占用常数内存,不占用额外原创 2020-12-28 14:40:35 · 1131 阅读 · 2 评论 -
【数据结构】Leetcode——回溯算法:排列问题/棋盘问题
1 全排列(46)题目: 给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:思路: 排列是有序的,即[1, 2] 与[2, 1]是两个不同的集合,故不需要参数startIndex参数了、 使用vector<bool>& used数组来标记集合中的元素是否使用过。class Solution {private: vector<int> path; vector<vector<int>>原创 2020-12-01 21:00:40 · 882 阅读 · 0 评论 -
【数据结构】Leetcode——回溯算法:组合问题/分割问题
回溯法解决的问题都可以抽象为树形结构(N叉树),回溯法的搜索过程就是一个树形结构的遍历过程。1 组合(77)题目:给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:思路:(图片来源:代码随想录)本题符合"组合问题",即N个数里面按一定规律找出k个数的集合。按照回溯算法模板框架:① 终止条件题目需返回k个数的集合,则当存储子集的size等于k时,达到终止条件,应该返回;② 单层搜索过程如图中,for循环用于横向遍历,递归用于纵向遍历;定义一个参数star原创 2020-11-06 14:54:38 · 855 阅读 · 0 评论 -
【数据结构】Leetcode——哈希表 经典题
hash 英[hæʃ]美[hæʃ]n. (回锅) 肉丁土豆; (尤指电话上的) #号;v. 反复推敲; 仔细考虑; 把……弄糟(乱); 斩碎; 斩(肉); 剁(肉); 细切(肉);[例句]The Government made a total hash of things and squandered a small fortune...原创 2020-10-13 22:21:22 · 2039 阅读 · 0 评论 -
【数据结构】Leetcode——二叉搜索树 经典题
开始之前学习一个单词热热身: freebie 英[ˈfriːbi] n. (常指公司提供的) 免费品;二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点。二叉查找树中序遍历有序。DP是玄学 递归也是玄学1 修剪二叉搜索树(669)题目:给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。示例:.原创 2020-09-28 19:45:01 · 783 阅读 · 0 评论 -
【数据结构】Leetcode——遍历树 经典题
深度优先遍历前序遍历(递归法,迭代法)中序遍历(递归法,迭代法)后序遍历(递归法,迭代法)广度优先遍历层次遍历(迭代法)「这里前中后,其实指的就是中间节点的遍历顺序」,只要大家记住 前中后序指的就是中间节点的位置就可以了。看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历方式前序遍历:中左右中序遍历:左中右后序遍历:左右中前中后序遍历的逻辑其实都是可以借助栈使用非递归的方式来实现的。而广度优先遍历的实现一般使用队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出原创 2020-09-25 22:26:25 · 1441 阅读 · 1 评论 -
【数据结构】Leetcode—— 树 递归经典题
1. 树的高度(104)题目: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。思路: 若使用递归版本,它的递归基应为当节点为空时,返回0; 若使用迭代版本,借助队列对树进行层次遍历,最后返回层数即可。class Solution {public: int maxDepth(TreeNode* root) { /* 递归版本 两行搞定 if(!root) return 0原创 2020-09-21 14:15:08 · 840 阅读 · 0 评论 -
【数据结构】Leetcode——栈与队列经典题
Contents1.用栈实现队列(232)2.用队列实现栈(225)3.最小值栈(155)4.用栈实现括号匹配(20)5. 单调栈 / Next Greater Element(739) / 循环数组5.1 数组中元素与下一个比它大的元素之间的距离(739)5.2 循环数组中比当前元素大的下一个元素(503)6 返回数组中滑动窗口的最大值 / 单调队列 / 双端队列(239)开始之前学两个单词热热身:naive [naɪˈiːv] adj. 缺乏经验的; 幼稚的; 无知的; 轻信的; 天真的原创 2020-09-16 15:13:57 · 546 阅读 · 0 评论 -
【数据结构】—— 列表 / 链表
Contents1 向量、列表与链表1.1 向量vector1.2 列表1.3 列表是链表的一般化推广2 ListNode模板类3 List对象4 无序列表5 有序列表6 列表排序6.1 插入排序 insertion sort6.2 选择排序 selection sort6.3 归并排序 自学 邓俊辉《数据结构(C++语言版)》第三章——列表,且结合Leetcode题库进行简单练习。Leetcode习题分类可参考此github???? ???? ???? ???? ???? ???? ????原创 2020-09-12 16:08:44 · 732 阅读 · 0 评论 -
【数据结构】Leetcode——链表经典题
Contents1 找出两个链表的交点 (160)2 链表反转 (206)3 归并两个有序的链表 (21)4 从有序链表中删除重复节点(83)5 删除链表的倒数第 n 个节点(19)6 交换链表中的相邻结点 (24)7 链表求和(445)8 回文链表(234)9 分隔链表(725)10 链表元素按奇偶聚集(328)Leetcode习题分类可参考此github,以下为数据结构中链表经典练习题,欢迎修改讨论。1 找出两个链表的交点 (160) 题目:编写一个程序,找到两个单链表相交的起始节点。原创 2020-09-12 16:06:01 · 348 阅读 · 0 评论