![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法篇
文章平均质量分 53
肉丸饭团
这个作者很懒,什么都没留下…
展开
-
KMP算法
leecode题号28.题目如下:实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。输入:haystack = “hello”, needle = “ll”输出:2输入:haystack = “aaaaa”, needle = “bba”输出:-1输入:haystack = “”, needle = “”输出:0一 . 什么是KM原创 2022-03-31 16:14:28 · 74 阅读 · 0 评论 -
堆排序--简化理解
1.什么是堆排序?堆排序满足两个特点1 必须是完全二叉树。2 父节点要同时大于或者小于左右孩子结点。根为最大的叫大顶堆,最小的叫小顶堆。升序一般使用大顶堆,降序使用小顶堆。2.堆排序详解我们以以下数组为例:int d[N]={4,6,8,5,9};因为我们要做升序排序,所以我们使用大顶堆。(1)将数组先堆化当前二叉树我们使用数组存储。所谓的堆化就是使当前二叉树变为大顶堆。大顶堆的定义就是父节点都比子节点要大。结点的左右孩子不用区分大小。我们先看堆化的过程。a.先找出非叶子结点,然原创 2022-03-30 14:45:47 · 3791 阅读 · 0 评论 -
二叉树基本操作
1 二叉树的遍历(1)二叉树的前序遍历递归实现: public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); preOrder(root, res); return res; } public void preOrder(TreeNode root, List<原创 2022-03-23 15:42:09 · 1041 阅读 · 0 评论 -
DP-动态规划
动态规划1 动态规划(DP)是什么?动态规划是一种解决问题的思想。动态规划最关键的问题在于找到子问题模型。(1) DP的自顶向下思想。比如递归,递归会不停的调用同一段代码,自顶而下,类似于树结构,当然,结果还是依赖出口,再层层由下层返回到上层。但是我们说,这种解决问题的思想就是DP的自顶向下思想。(2) DP的自下而上思想。比如迭代,for循环。这个子问题的结果作为下一个子问题的初始条件,直到计算出最终结果。这种由小到大的就是DP的自下而上思想。(3) DP的状态转移方程。找到子问题,再将原创 2022-03-17 14:06:39 · 492 阅读 · 0 评论 -
算法题集锦
1.判断一个单向链表是否存在环,并且找到环入口。https://www.jianshu.com/p/ef71e04241e42.删除链表的倒数第n个位置。#import "SinglyLinkedList.h"/** 给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 输入:head = [1,2], n = 1 输出:[1] */// 2LinkList removeNthFromE原创 2022-03-03 15:04:55 · 286 阅读 · 0 评论 -
LRU算法
1.什么是LRU算法?LRU(最近最少使用),是一种缓存淘汰机制。如下图:2.LRU的数据结构是啥样的?Hash表+双向链表.1)为啥使用Hash表和双向链表?查找:由上图可知,通过key使用Hash表查找对应节点,只需要O(1)的时间复杂度。删除和移动:如果是单向链表,删除和移动结点是需要访问前驱元素的,而访问前驱元素就要遍历,所以单向链表的删除和移动是需要的时间复杂度是o(n),但是如果使用双向链表,通过pre就可以访问前边的元素,操作都是指针移动,那么双向链表的删除和移动的时间复杂度也是原创 2022-03-03 14:15:05 · 342 阅读 · 0 评论