![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 71
kuangd_1992
这个作者很懒,什么都没留下…
展开
-
【算法】二叉搜索树BST
直接基于 BST 的数据结构有 AVL树,红⿊树等等,拥有了⾃平衡性质,可以提供 logN 级别的增删查改效率;还有 B+ 树,线段树等结构都是基于 BST 的思想来设计的。原创 2023-06-13 01:12:35 · 428 阅读 · 0 评论 -
【算法】位操作
1、利用操作’|'与空格将英文字符转换为小写2、利用操作’&'与空格将英文字符转换成大写3、利用操作’^'与空格进行英文字符大小写转换4、不用临时变量,交换两个数5、加一6、减一7、判断两个数是否异号8、清除数字n的二进制表示中的最后一个1n &(n - 1)原创 2023-06-04 20:59:45 · 161 阅读 · 0 评论 -
【算法】深度优先搜索DFS(一)
深度优先搜索(DFS)是一种基本的图算法,主要针对图和树,英文缩写:DFS。深度优先搜索使用的策略:从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底。理解深度优先搜索的关键在于:解决“当下该如何做”,同时“下一步如何做”则和“当下该如何做”是一样的。通常的方法:把每一种可能都去尝试一遍(一般使用for循环来遍历),当前这一...原创 2019-12-08 17:50:50 · 770 阅读 · 1 评论 -
【机器学习】梯度下降算法原理和实现
梯度下降是许多机器学习模型中都会直接或间接使用的算法。原创 2022-09-25 15:44:30 · 2138 阅读 · 0 评论 -
【算法】滑动窗口
本文主要简单介绍滑动窗口算法原创 2022-07-17 21:51:18 · 103 阅读 · 0 评论 -
【算法】二分查找
2022年5月15日目录使用场景二分查找框架寻找一个数(基本二分搜索)寻找左侧边界寻找右侧边界逻辑梳理使用场景寻找一个数寻找左侧边界寻找右侧边界二分查找框架代码int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid = left + (right - left) / 2; ..原创 2022-05-15 15:26:23 · 103 阅读 · 0 评论 -
【算法】前缀和(一维前缀和与二维前缀和)
前缀和是一种重要的预处理,能大大降低查询的时间复杂度。【一维前缀和】给定一个数组A[1,2,……n],则它的前缀和数组为PrefixSum[1..n]。定义为:PrefixSum[i] = A[0]+A[1]+...+A[i-1];【例子】A[5,6,7,8] --> PrefixSum[5,11,18,26]PrefixSum[0] =A[0] ;PrefixSum...原创 2019-12-09 22:55:15 · 5062 阅读 · 1 评论 -
【算法】差分数组
介绍差分数组的主要适用场景是频繁对原始数组的某个区间的元素进行增减。例如:输入一个数组sums,要求给区间nums[2……6]全部加1,再给nums[3……9]全部减去3,再给……,经过几次操作之后,最后nums数组的值是什么?常规思路按照题目的顺序进行处理,时间复杂度是O(N),对nums的修改很频繁。差分数组思路 类似于前缀和的preSum数组一样,对nums数组构造一个diff差分数组,diff[i]是nums[i]和nums[i-1]之差。 int[] diff原创 2021-12-01 08:00:37 · 1424 阅读 · 0 评论 -
【算法】二叉搜索树
介绍二叉搜索树——Binary Search Tree,BST。定义二叉搜索树是一种节点值之间具有一定数量级次序的二叉树,对于树中每个节点:若其左子树存在,则其左子树中每个节点的值都不大于该节点值; 若其右子树存在,则其右子树中每个节点的值都不小于该节点值。查询复杂度观察二叉搜索树结构可知,查询每一个节点需要的比较次数为节点深度加一。在二叉搜索树节点个数确定的情况下,整棵树的高度越低,节点的查询复杂度越低。构造复杂度二叉搜索树的构造过程,也就是将节点不断插入到树中适当位置的过原创 2021-11-18 08:55:12 · 801 阅读 · 0 评论 -
【算法】二叉树
写树相关的算法,先搞清楚当前root节点该做什么,以及什么时候做,然后根据函数定义递归调用子节点,递归调用会让孩子节点做相同的事情。二叉树遍历框架/* 二叉树遍历框架 */void traverse(TreeNode root) { // 前序遍历 traverse(root.left) // 中序遍历 traverse(root.right) // 后序遍历}快速排序和归并排序 快速排序的逻辑:若要对nums[lo..hi]进行排序,先找..原创 2021-11-17 21:54:52 · 456 阅读 · 0 评论 -
【算法】单调栈
介绍单调栈实际上就是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内的元素都保持有序(单调递增或单调递减)。单调栈用途不太广泛,只处理一种典型的问题,叫做 Next Greater Element。模板给你一个数组nums,请你返回一个等长的结果数组,结果数组中对应索引存储着下一个更大元素,如果没有更大的元素,就存 -1。比如说,输入一个数组nums = [2,1,2,4,3],返回数组[4,2,4,-1,-1]。解释:第一个 2 后面比 2 大的数是 4; 1 后面比...原创 2021-10-25 19:34:37 · 364 阅读 · 0 评论 -
【算法】链表(题目+方法)
时间:2021-10-17对于单链表的题目来说,双指针的运用是很广泛的。合并两个有序链表(Leetcode 21)题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]思路:由于题目最后需要输出一个新的链表,所以这里需要先新建一个虚拟头结点,以便后续的输出,同时可以避免处理空指针的情况。ListNode dummy = new ..原创 2021-10-17 23:39:49 · 340 阅读 · 0 评论