
算法
文章平均质量分 65
不会Java的MING
Java虐我千百遍,我待Java如初恋
展开
-
Java的数据结构
通过下标快速定位,如果为这个位置什么都没有就返回null,如果有就调用equals(),如果链表上所有的k都为false,那就返回null,负责true,就返回出这个value。如果下标处为null,那就将数据插入,如果下标不为null,将调用equals()方法,如果又返回false,将value插入到链表的末尾,如果为true,就将数据覆盖。链表是一种递归类型的数据结构,它可以为空,或者指向一个节点的引用,该节点还有另外一个元素和一个指向另外一条链表的引用。含有大量的引用,占用的内存空间大;原创 2023-07-07 16:43:15 · 594 阅读 · 0 评论 -
算法(有效的括号,最长有效括号,接雨水)
有效的括号,最长有效括号,接雨水原创 2023-05-05 17:03:30 · 76 阅读 · 0 评论 -
算法(旋转链表)
旋转链表,先算出链表长度,然后将首位连接起来,根据K来选取K+1的位置,为新的链表的头节点。把每一步也做了注释。原创 2023-05-04 19:15:02 · 88 阅读 · 0 评论 -
算法(java中的排序)
本文介绍了Java中几种常见的排序算法:插入排序,选择排序,冒泡排序,快速排序,归并排序,堆排序,希尔排序原创 2023-05-02 15:48:45 · 128 阅读 · 0 评论 -
算法(岛屿周长,岛屿数量,岛屿最大面积)
然后就可以遍历节点,然后判断是非为1,是1就将该地址的值+1(避免重复遍历),然后我们将该位置的上下左右判断一下,如果是0(也就是岛屿和湖面的交界),当然遇到边界也是相同的情况,+1。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。首先还是循环遍历出岛屿位置,然后就开始寻找与它相邻的岛屿,将相邻的岛屿+1,直到没有岛屿,这样就可以看循环的次数得到岛屿数量。该题在岛屿问题里面,算是比较基础的,我们就可以根据该题,慢慢理解岛屿问题的求解。原创 2023-04-27 15:20:46 · 404 阅读 · 0 评论 -
算法(完全平方数)
首先就是动态规划的思路,就是将输入的n进行拆解,n=a*a+b,然后再将b进行拆分为b=c*c+d,所以就需要不断的取最大的a,然后取最大的c,n的最优解就是1+(a的最优解)。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。根据以上,得到动态规划方程,dp[i]=Math.min(dp[i],dp[i-j*j]+1)给你一个整数 n ,返回 和为 n 的完全平方数的最少数量。原创 2023-04-26 17:14:14 · 178 阅读 · 0 评论 -
算法(手写归并排序)
我们将数组一直分割,然后排序之后合并,如此,得到递推关系,具体排序方法,对左右两个数组的排序,我们只用定义两个指针,分别指向左侧部分的起始位置和右侧部分的起始位置,同时建立一个空数组和一个辅助指针,比较左指针和右指针所对应的元素的大小,较小的元素填充至空数组,同时其对应的指针和辅助指针均加1。merge函数是建立一个新的数组,存放比较后的数组,最后将其放回到nums数组之中。具体实现还是挺简单的。首先是将需要排序的数组分割开来,拆分为左右两部分,分解为两个子问题。2,得到递归的递推关系。原创 2023-04-25 17:57:08 · 143 阅读 · 0 评论 -
手撕红黑树代码(Java)
红黑树详细讲解,详细的源码讲解原创 2023-04-02 12:02:34 · 349 阅读 · 2 评论 -
算法(N皇后问题)
可以使用record[]数组存放合法的置放皇后条件,由于一行只让存放一个皇后,所以我们可以将record[[0,0],[1,1],[2,2]](在第一列第一个,第二列第二个,第三列第三个存放皇后),转换为record[0,1,2],让其数组的下标作为皇后的行数。由上图,大家也可以理解该题的解法,就是一层一层判断出皇后出现的位置是否符合逻辑,大家可能想到的第一个方法就是使用for循环进行处理,比如4皇后问题,可以使用四个for循环进行求解,但是我们处理N皇后问题不方便,于是我们可以使用回溯的方法进行处理。原创 2023-04-07 21:50:44 · 118 阅读 · 0 评论 -
算法(不同路径,不同路径 II )
我们可以先分析一下,这是一类动态规划类题目,我们应该找出递归方程,终点在dp[i][j],因为机器人只能向下和向右移动,而且机器人初始点在dp[0][0],所以就是从(0,0)到(i,j)的路径,因为到达(i,j)只有两条路dp[i-1][j],dp[i][j-1],所以可以得到递归方程dp[i][j]=dp[i][j-1]+dp[i-1][j]。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。原创 2023-02-28 20:06:04 · 496 阅读 · 0 评论 -
算法(杨辉三角,杨辉三角 II )
这样就可以很明显的看出来,就那第四行第二列的‘3’找规律,就可以发现,它是由第三行的第一列加第二列组成的。今天的算法题是杨辉三角,大家肯定都对杨辉三角都不陌生,这类型的题也是出现频率提高的。在「杨辉三角」中,每个数是它左上方和右上方的数的和。在「杨辉三角」中,每个数是它左上方和右上方的数的和。,返回「杨辉三角」的第。生成「杨辉三角」的前。原创 2023-02-27 17:17:59 · 90 阅读 · 2 评论 -
算法(跳跃游戏,跳跃游戏 II )
分析:这个题需要注意的就是‘0’的位置,也就是,判断在‘0’之前,能不能直接跳过‘0’,如果可以,就返回‘true’,否则就返回‘false’。解法2:上面是从前往后遍历的,我们也可以从后往前遍历,只要判断'nums[i]'如果可以到末尾,那么这个位置就可以作为临时末尾,反之,就距离+1,然后一直判断到最前方,只要最后结果可以为末尾那么就为真。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处;初始位置为 nums[0]。数组中的每个元素代表你在该位置可以跳跃的最大长度。原创 2023-02-26 09:07:32 · 78 阅读 · 0 评论 -
算法(爬楼梯,斐波那契数,第 N 个泰波那契数)
分析:此题很明显就是动态规划问题,于是我们可以将它分为两个问题,爬楼梯的数量可以分为两个部分,第一个部分为只剩一阶的方法(n-1),第二个部分为只剩两阶的方法(n-2),所以总数=(n-1)+(n-2),然后因为已知0和1阶的时候方法为1,这样就可以优化算法,得到以下代码。分析:此题和上面第二题类似,只是刚刚是F(n)=F(n−1)+F(n−2),现在需要F(n)=F(n−1)+F(n−2)+...+F(1)+F(0);分析:很容易知道,F(n)=F(n−1)+F(n−2),所以我们直接根据已知的。原创 2023-02-25 21:06:55 · 139 阅读 · 1 评论