![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
每日之算法
文章平均质量分 56
每日算法笔记
Cherry Xie
喜欢学习,只是因为知识能让我更好地理解与处理遇到的事情
展开
-
K-Nearest Neighbors (K-NN) 算法
K-NN 算法最早出现在 1951 年,由 Thomas Cover 和 Peter Hart 在他们的论文"Nearest Neighbor Pattern Classification"中首次提出。K-NN 算法的产生背景主要源于以下几个方面:在现实生活中,许多问题都可以归结为分类问题,比如医疗诊断、图像识别、文本分类等。 K-NN 算法作为一种简单有效的分类算法,很好地满足了这种需求。20世纪50年代,统计学习理论取得了较大进展,为机器学习算法的产生奠定了基础。K-NN 算法基于统计学习的思想,利用训原创 2024-07-06 08:45:00 · 735 阅读 · 0 评论 -
算法解题之双指针
双指针技术是一种常见的算法设计思路,它通常适用于处理有序数组或链表等数据结构。双指针算法通过使用两个指针,同时从不同的方向遍历数组或链表,来解决一些特定的问题。原创 2024-07-05 08:45:00 · 980 阅读 · 0 评论 -
算法之图论
图论是一门研究图(包括有向图和无向图)的数学分支。图是由节点(顶点)和边组成的数学抽象模型,广泛应用于计算机科学、社会科学、工程领域等。原创 2024-06-29 08:45:00 · 814 阅读 · 0 评论 -
二叉树之深度优先((Depth-First Search, DFS)
深度优先搜索是一种遍历或搜索图的算法,它从图的一个起始节点开始,沿着路径尽可能深的遍历图的分支,直到到达最深的节点,然后回溯并探索其他的分支。从起始节点开始访问。标记当前节点为已访问。对于当前节点的所有未被访问的邻居节点,递归地应用深度优先搜索算法。当所有可达的节点都被访问完之后,算法结束。首先访问当前节点然后递归地访问当前节点的所有未被访问的邻居节点直到到达最深的节点,然后回溯深度优先搜索算法可以使用栈或递归来实现。原创 2024-06-29 08:45:00 · 846 阅读 · 0 评论 -
每日算法之从前序与中序遍历序列构造二叉树
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例 1:输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]示例 2:输入: preorder = [-1], inorder = [-1]输出: [-1]原创 2024-05-05 09:00:00 · 337 阅读 · 0 评论 -
每日算法之矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。示例 1:输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]原创 2024-04-14 23:17:59 · 604 阅读 · 0 评论 -
每日算法之翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例 2:输入:root = [2,1,3]输出:[2,3,1]示例 3:输入:root = []输出:[]提示:树中节点数目范围在 [0, 100] 内。原创 2024-04-30 10:08:45 · 103 阅读 · 0 评论 -
每日算法之二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]原创 2024-05-03 09:00:00 · 252 阅读 · 0 评论 -
每日做题之排序链表
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表。示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例 2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例 3:输入:head = []输出:[]进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?原创 2024-04-27 23:16:39 · 131 阅读 · 0 评论 -
每日做题之搜索二维矩阵
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。原创 2024-04-25 09:49:56 · 261 阅读 · 0 评论 -
每日算法之移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:输入: nums = [0]输出: [0]原创 2024-03-28 01:29:17 · 228 阅读 · 0 评论 -
每日算法之环形链表
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。示例 1:输入:head = [3,2,0,-4], pos = 1。原创 2024-04-26 21:27:20 · 267 阅读 · 0 评论 -
每日算法之路径总和
给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。示例 1:输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8输出:3解释:和等于 8 的路径有 3 条,如图所示。原创 2024-05-08 08:45:00 · 178 阅读 · 0 评论 -
每日算法之螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]原创 2024-04-21 10:13:25 · 325 阅读 · 0 评论 -
每日算法之接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9。原创 2024-03-28 19:37:27 · 352 阅读 · 0 评论 -
每日算法之对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false进阶:你可以运用递归和迭代两种方法解决这个问题吗?原创 2024-04-29 11:25:35 · 181 阅读 · 0 评论 -
每日算法之最长连续序列
2再遍历一趟序列得到结果,时间复杂度主要取决于排序的快慢,好的情况下是O(n),坏的情况下是O(n^2)。给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。当然,通过set的方式可以简化代码,但是没酱紫快。解释:最长数字连续序列是 [1, 2, 3, 4]。输入:nums = [0,3,7,2,5,8,4,6,0,1]请你设计并实现时间复杂度为 O(n) 的算法解决此问题。输入:nums = [100,4,200,1,3,2]1、以最快的效率先排序。原创 2024-03-27 19:44:33 · 259 阅读 · 0 评论 -
每日做题之旋转图像
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]示例 2:输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]原创 2024-04-24 09:26:58 · 379 阅读 · 0 评论 -
每日算法之两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]原创 2024-04-27 23:04:18 · 238 阅读 · 0 评论 -
每日算法之二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3。原创 2024-05-11 08:45:00 · 346 阅读 · 0 评论 -
每日算法之二叉搜索树中第K小的元素
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。示例 1:输入:root = [3,1,4,null,2], k = 1输出:1示例 2:输入:root = [5,3,6,2,4,null,null,1], k = 3输出:3进阶:如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法?原创 2024-05-03 09:00:00 · 270 阅读 · 0 评论 -
每日算法之二叉树的右视图
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 1:输入: [1,2,3,null,5,null,4]输出: [1,3,4]示例 2:输入: [1,null,3]输出: [1,3]示例 3:输入: []输出: []原创 2024-05-04 09:00:00 · 222 阅读 · 0 评论 -
每日算法之盛最多的水
有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。双指针,是一种常见的时间复杂度的优化思路:通过问题的分析数据,将问题转化为,什么情形下左边动,什么情形下右边动的问题。显然,双指针的解题思路,在时间复杂度上大大优于前两者,量级直接从n^2降到了n。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。输入:[1,8,6,2,5,4,8,3,7]太晚了,先这样,= =。原创 2024-03-23 00:51:49 · 308 阅读 · 0 评论