![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
文章平均质量分 78
Terio_my
凡是过往,皆为序章
展开
-
(基于Java)算法笔记——复杂数据结构(并查集)
复杂数据结构(并查集)算法简略记录1、并查集并查集(union-find或disjoint set)可以动态联通两个点,并且可以快速判断两个点是否联通,求最小生成树;由一个数组、两个函数(查找一个数的根、合并路线)组成,常用来解决一些不相交集合的合并与查找问题合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。① LeetCode 684 冗余连接(并查集)解题思路如果两个顶点属于不同的连通分量,则说明在遍历到当前的边之前,这两个顶点之原创 2021-08-02 14:47:38 · 322 阅读 · 0 评论 -
(基于Java)算法笔记——数据结构(图)
数据结构(图)算法简略记录1、引言图是树的升级版(树是相连无相无环图)有向图无向图有循环无循环所有节点相连所有节点不相连图通常有两种表示方法,假设图中有n个节点,m条边邻接矩阵:建立一个 n x n矩阵G,如果第i个节点连向第j个节点,则G[i][j]=1,反之为0如果图是无向的,则该邻接矩阵一定是对称矩阵,即G[i][j]=G[j][i]邻接链表:建立一个大小为n的数组,每个位置i储存一个数组或链表,表示第i个节点连向其他节点邻接矩阵 比 邻接链表 空间开销原创 2021-07-30 18:45:42 · 258 阅读 · 0 评论 -
(基于Java)算法笔记——字符串问题
字符串问题算法简略记录1、引言字符串可以看成字符组成的数组2、字符串比较① LeetCode 242 有效的字母异位词解题思路对字符串循环一次,统计各字符的个数并写进数组对两个数组循环判断是否相等Java解答class Solution { public boolean isAnagram(String s, String t) { if(s.length() != t.length()) return false; char[] c_s =原创 2021-07-09 16:49:23 · 255 阅读 · 0 评论 -
(基于Java)算法笔记——位运算问题
位运算问题算法简略记录1、常用技巧利用二进制进行计算运算符号:^按位异或;&按位与;|按位或;~取反;<<算术左移;>>算术右移常见特性(0s/1s分别代表只由0或1构成的二进制数):x ^ 0s = x ; x ^ 1s = ~x ; x ^ x = 0x & 0s = 0 ; x & 1s = x ; x & x = xx | 0s = x ; x | 1s = 1 ; x | x = xn & (n-1):能去除n原创 2021-07-08 09:15:47 · 171 阅读 · 0 评论 -
(基于Java)算法笔记——解决数学问题
解决数学问题算法简略记录原创 2021-07-05 17:26:28 · 347 阅读 · 0 评论 -
(基于Java)算法笔记——分治算法
分治算法的简单学习笔记1、算法解释分治算法——分与治把原问题分为子问题再把子问题进行处理合并分治问题可以通过主定理求得时间复杂度自上而下的分治结合memoization,避免重复遍历相同的子问题主定理2、表达式问题① LeetCode 241 为运算表达式设计优先级解题思路遍历字符串遇到操作符,就将左右两边的字符串,分别当作 两个表达式Java解答简单递归class Solution { public List<Integer> diffWaysT原创 2021-07-04 22:29:20 · 178 阅读 · 0 评论 -
(基于Java)算法笔记——动态规划算法
动态规划算法的简单学习笔记1、算法解释动态规划(Dynamic Programming,DP)查找很多重叠子问题的最优解(最优子结构:局部最优解能决定全局最优解)将大问题重组为许多子问题每个子问题的结果被保存,累积下来即为解决大问题、关键是:状态转移方程进行空间压缩,节省空间消耗自上而下与自下而上动态规划:自上而下,先解决子问题,再解决父问题;适合求最终状态的问题带状态记录的优先搜索:自下而上,从父问题到子问题;适合输出所有符合的路径2、一维动态规划3、二维动态规划原创 2021-07-01 10:25:52 · 465 阅读 · 0 评论 -
(基于java) 算法笔记 —— 搜索算法
搜索算法的简单学习笔记1、算法解释常见的优先搜索算法:深度优先搜索(DFS)和广度优先搜索(BFS),广泛在图和树等结构中进行搜索2、深度优先搜索总是对新节点调用遍历,看起来向着“深度”方向前进搜索到一个新的节点后,立即对该新节点进行遍历遍历需要先入后出的栈;也可以使用与栈等价的递归栈与递归调用的原理相同递归便于实现,同时方便进行回溯(刷题推荐)栈便于理解,不易出现递归栈满(工程推荐)可用来检测环路记录每个遍历过的节点的父节点若一个节点被再次遍历且父节点不同,则说明有环原创 2021-06-11 17:24:46 · 1206 阅读 · 0 评论 -
(基于java) 算法笔记 —— 排序算法
排序算法的简单学习笔记1、算法解释对数据按照从小到大或从大到小的顺序,重新排列顺序比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序2、常用的排序算法1)快速排序在数组中随机选一个数(默认数组首个元素),数组中小于等于此数的放在左边,大于此数的放在右边,再对数组两边递归调用快速排序,重复这个过程原创 2021-05-18 14:10:31 · 139 阅读 · 0 评论 -
(基于java) 算法笔记 —— 二分查找算法
二分查找算法的简单学习笔记1、算法解释二分查找又称二分法或折半查找并不一定是对半划分,只是分成两部分取其中一部分继续查找二分查找的时间复杂度为O(logn)定义区间开闭性————两个小Tips尝试熟练,左闭右开(满足C++、Python等语言习惯);或左闭右闭(处理边界条件)。注:尽量保持一种写法刷题时考虑:当前的写法,最后一个数或两个数是否会陷入死循环;如果会,则换种写法2、求开方问题① LeetCode 69 X的平方解题思路根据牛顿迭代思路设定划分区间的边界Jav原创 2021-05-16 18:02:25 · 180 阅读 · 0 评论 -
(基于java) 算法笔记 —— 双指针算法
双指针算法的学习,简单笔记1、算法解释双指针的存在主要用于遍历数组,两个指针指向不同的元素,协同完成任务若两个指针指向同一数组、方向相同、不会相交,也称为滑动窗口2、两数和问题① LeetCode 167 两数之和 Ⅱ - 输入有序数组解题思路给定的数组已经按照升序排列了设定双指针,分别指向头和尾,令其所指的数字相加,判断是否等于目标若等于则返回;和大于目标则后指针向前移;和小于目标则前指针向后移注: 前指针需小于后指针Java解答class Solution {原创 2021-05-13 19:52:22 · 584 阅读 · 3 评论 -
(基于java) 算法笔记 —— 贪心算法
贪心算法的学习,简单笔记1、算法解释贪心算法/贪心思想:将全局大问题,分解成若干局部小问题使局部小问题为最优全局大问题成为最优2、分配问题① LeetCode 455 分发饼干解题思想——贪心思想对于【孩子】、【饼干】数组,先进行排序从左往右,用饼干【满足】孩子如果满足,当前的孩子和饼干就“移出”如果不满足,当前饼干“移出”,让后面的饼干来返回输出满足孩子的总数量Java解答——贪心解法class Solution { public int findCon原创 2021-05-10 19:58:47 · 257 阅读 · 0 评论