
数据结构与算法
文章平均质量分 86
尚墨1111
这个作者很懒,什么都没留下…
展开
-
一文通数据结构与算法之——贪心算法+常见题型与解题策略+Leetcode经典题
文章目录贪心算法1 概念1.1 心得1.2 题目列表2 Leetcode经典题2.1 分发物品135.分发糖果(非常经典)455.分发饼干[860. 柠檬水找零](https://leetcode-cn.com/problems/lemonade-change/)2.2 数组序列相关[1005. K 次取反后最大化的数组和](https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations/)[376. 摆动序列](https:原创 2021-10-08 10:44:09 · 477 阅读 · 0 评论 -
学习算法过程中学到的技巧_持续更新
1. 套路1:一般这种数对,还涉及排序的,根据第一个元素正向排序,根据第二个元素反向排序,或者根据第一个元素反向排序,根据第二个元素正向排序,往往能够简化解题过程。比如这些题目:406. 根据身高重建队列452. 用最少数量的箭引爆气球:435. 无重叠区间56. 合并区间2. 技巧2: 成环的题目对于索引的控制:i%len比如:134. 加油站圆环回原点问题题目描述:圆环上有10个点,编号为0~9。从0点出发,**每次可以逆时针和顺时针走一步,问走n步回到0点共有多少种走法。原创 2021-10-07 21:32:21 · 165 阅读 · 0 评论 -
一文通数据结构与算法之——回溯算法+常见题型与解题策略+Leetcode经典题
文章目录回溯算法1 基本内容1.1 回溯算法的框架1.2 回溯核心思想1.3 回溯法解决的问题1.4 题目列表1.4 常见问题分析2 经典力扣题2.1 全排列问题2.1.1 没有重复元素的全排列2.1.2 含重复元素的递归全排列2.2 子集问题2.2.1 不含重复元素的子集2.2.2 含重复元素的子集个数2.2.3 递增子序列2.3 组合问题[77. 组合](https://leetcode-cn.com/problems/combinations/)[39. 组合总和](https://leetcode原创 2021-10-04 09:46:28 · 672 阅读 · 0 评论 -
一文通数据结构与算法之——图+常见题型与解题策略+Leetcode经典题
文章目录数据结构——图1 基本概念1.1 图的存储方式1.2 有向加权图1.3 实现1.4 图的遍历1.4.1 深度优先遍历图 BFS1.4.2 广度优先遍历图 BFS1.5 拓扑排序1.5.1 判断有向图是否存在环1.5.2 输出拓扑顺序:深度遍历法1.5.3 拓扑排序:广度优先遍历法2 真题2.1 路径问题(动态规划)2.1.1 **[64. 最小路径和](https://leetcode-cn.com/problems/minimum-path-sum/)**2.2.2 **[62. 不同路径]原创 2021-10-03 15:24:17 · 1717 阅读 · 0 评论 -
一文通数据结构与算法之——二叉树+常见题型与解题策略+Leetcode经典题
文章目录二叉树1 二叉树基本操作1.1 二叉树定义1.2 前、中、后序遍历1.2.1 递归形式1.2.2 非递归,迭代形式1.3 遍历方式2 剑指 Offer 算法题2.1 题目列表递归遍历序列化和反序列化二叉搜索树2.2 实战[剑指 Offer 27. 二叉树的镜像](https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/)[剑指 Offer 28. 对称的二叉树](https://leetcode-cn.com/problems/原创 2021-10-03 15:22:10 · 841 阅读 · 0 评论 -
一文通数据结构与算法之——链表+常见题型与解题策略+Leetcode经典题
文章目录1 链表1.1 常见题型及解题策略1.1.1 LeetCode中关于链表的题目有以下五种类型题:1.1.2 解题策略1.2 链表的基本内容1.2.1 链表的基本结构:1.2.2 插入新元素1.2.3 删除某个元素1.2.4 遍历单链表1.3 删除链表结点类题目1.3.1 题解方法1.3.2 可能出现的问题1.3.3 题库列表:237、删除链表中的节点203、移除链表元素剑指 Offer 18. 删除链表的节点面试题 02.01. 移除重复节点82. 删除排序链表中的重复元素 II19、删除链表的倒原创 2021-10-03 15:20:29 · 510 阅读 · 0 评论 -
一文通数据结构与算法之——数组+常见题型与解题策略+Leetcode经典题
文章目录2 数组2.1 常见题型及解题策略2.2 字符串操作基础2.3 删除数组元素2.3.1 题库列表2.4 双指针技巧2.4.1 题库列表2.5 数组类操作2.6 剑指offer 数组题:剑指 Offer 04. 二维数组中的查找剑指 Offer 11. 旋转数组的最小数字剑指 Offer 17. 打印从1到最大的n位数【剑指Offer】21、调整数组顺序使奇数位于偶数前面剑指Offer】29、顺时针打印矩阵【剑指Offer】39、数组中出现次数超过一半的数字【剑指Offer】51、数组中的逆序对【剑指原创 2021-10-03 15:17:42 · 998 阅读 · 0 评论 -
图文最详细的堆解析:从二叉树到堆到解析大根堆小根堆,分析堆排序,最后实现topK经典面试问题
堆1 数据结构——堆 Heap1.0 树1.1堆1.1.1 什么是堆1.1.2 堆的常用方法:1.2 数组构造大根堆1.2.1 节点与数组索引的对应关系1.2.2 实际样例1.3 Java实现1.3.1 自下往上法1.3.2 堆的相关操作1.4 堆排序1.4 优先队列`PriorityQueue`1.4.1 什么是优先级队列1.4.2 自定义排序和Lambda回顾1.4.3 源码分析2 面试经典TopK问题2.1 题目列表:2.2 TopK小2.2.1 基于快排找topk小2.2.2 大根堆法找topk小原创 2021-07-10 18:18:50 · 2322 阅读 · 0 评论 -
字符串匹配算法
字符串匹配算法此算法通常输入为原字符串(string)和子串(pattern),要求返回子串在原字符串中首次出现的位置。比如原字符串为“ABCDEFG”,子串为“DEF”,则算法返回3。BF(Brute Force,暴力检索)KMP(教科书上最常见算法)BM(Boyer Moore)RK(Robin-Karp,哈希检索)Sunday算法暴力检索首先将匹配串和模式串左对齐,然后从左向右一个一个进行比较,如果不成功则模式串向右移动一个单位。速度最慢。时间复杂度:O(m*n)/** *原创 2021-08-12 08:26:33 · 1512 阅读 · 0 评论 -
面试相关-七大排序算法:图解+动图+最直观的代码分析_性能比较
1 排序算法:1.1 面试面试中最常考的是快速排序和归并排序,经常有面试官要求现场写出这两种排序的代码。其他排序可能会要求比较各自的优劣、各种算法的思想及其使用场景。分析算法的时间和空间复杂度。1.2 区分简单的排序:冒泡排序、选择排序、插入排序简单排序的变种:快速排序、堆排序、希尔排序,比较高效的排序。基于分治递归思想:归并排序线性排序:计数排序、桶排序、基数排序三种排序算法大体可分为两种:比较排序:时间复杂度最少可达到O(nlogn),主要有:冒泡排序,选择排序,插入排序,原创 2021-05-17 19:03:38 · 1169 阅读 · 0 评论 -
【试算法题梳理】——二叉树
面试算法题——二叉树整理---二叉树的精髓在于递归的调用思想(自顶向下、自底向上)层序遍历的两种思想(递归、栈)相应的又有很多其他的应用---1.二叉树的前、中、后序遍历方法(递归、非递归)2.二叉树的层序遍历3.二叉树的递归解决问题|-- 最大深度、最小深度、最大宽度、节点个数、二叉树的直径|-- 判断对称二叉树、相同二叉树、翻转二叉树、二叉树子树、合并二叉树、平衡二叉树|-- 二叉树路径和、最大路径和、第k大的节点、两节点的最大距离|-- 公共祖先|-- 序列化和反序原创 2020-12-21 11:22:24 · 213 阅读 · 0 评论 -
动态规划,高楼扔鸡蛋问题的三种解答方法,区别在于状态不一样写出的转移方程就不一样
import java.util.HashMap;import java.util.Map;/** * 887. 鸡蛋掉落 * 动态规划,选择是选择楼层,穷举 dp[k][n]=m 存的值就是答案 m * 法一:递归,超出时间限制 复杂度 O(KN^2) * 法二:递归,二分法缩小范围 复杂度O(KlogN) * 动态规划,选择是当前鸡蛋 k和最多尝试次数 m,能确定的最大楼层,dp[k][m] = n * 法三:逆推出原创 2021-03-07 10:25:07 · 374 阅读 · 0 评论 -
理解二叉树递归中的自底向上和自顶向下两种思想
前言:一直搞不清楚自顶向下和自底向上的区别下面从几个例子来简要分析一、区分两个概念:自顶向下:直接return 函数调用自身下一级实现,比如 return Fibonacci(n-1) + Fibonacci(n-2);自底向上:先递归到最小单位(叶子节点),再从最小单位往上抛结果,传递结果二、具体事例分析:/** * 两种遍历方向,计算最大深度 * 自顶向下 * 自底向上 * * @Auther:sommer1111 * @date 2020/11/10 19:05 */p原创 2020-12-18 09:46:59 · 3661 阅读 · 0 评论 -
二叉树的层序遍历——分别用深度遍历递归实现和广度队列实现
二叉树的层序遍历一、参考:`LeetCode`官网题二、深度遍历——递归法三、广度遍历——队列法一、参考:LeetCode官网题 * 102:二叉树的层序遍历 * 107:二叉树的层次遍历 II * 剑指 Offer 32 - I. 从上到下打印二叉树 * 剑指 Offer 32 - II. 从上到下打印二叉树 II * * 题目描述:按层遍历,并将每一层用 list ,返回一个最终的遍历结果 * 3 * / \ * 9 20 * / \ * 1原创 2020-11-10 17:31:08 · 244 阅读 · 0 评论 -
二叉树的前中后序遍历:递归法+迭代法
文章目录前言一、二叉树的代码二、递归法1.二叉树的前、中、后序的递归遍历三、迭代法1.前序遍历2.后序遍历2.中序遍历总结扩展:判断单值二叉树前言本文总结自LeetCode的题库,其中代码参考题解,题解中还有许多其他的方法,本文代码以简洁易理解为基本要求。这里也不对二叉树的基本知识进行讲解,只对实现的代码进行解释介绍提示:以下是本篇文章正文内容,下面案例可供参考一、二叉树的代码二叉树节点的最简单结构class TreeNode { int val; TreeNode le.原创 2020-09-27 09:11:18 · 503 阅读 · 0 评论