![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
2. 算法
芝士不知世
这个作者很懒,什么都没留下…
展开
-
算法目录
目录 数据结构相关 算法思想 数据结构相关 链表: ok 26、80、82、83. 删除数组/链表中的重复项 88、21. 合并两个有序数组/链表 9. 回文数、125. 验证回文串、234. 回文链表 160. 相交链表 27. 移除元素、283...原创 2019-05-23 10:32:38 · 318 阅读 · 0 评论 -
LeetCode-62. 不同路径、63. 不同路径 II
目录62. 不同路径63. 不同路径 II62. 不同路径【题目】:【方法1】:动态规划创建一个矩阵 res[m][n],res[i][j] 代表到 (i,j) 位置的路径数,等于到达(i,j) 位置左边和上面的路径之和res[i][j]=res[i-1][j]+res[i][j-1];【方法2】:【方法3】:三种方...原创 2019-07-04 11:33:43 · 231 阅读 · 0 评论 -
LeetCode-617. 合并二叉树
目录617. 合并二叉树617. 合并二叉树题目:代码:原创 2019-06-06 19:41:30 · 191 阅读 · 0 评论 -
LeetCode-647. 回文子串、696. 计数二进制子串
目录647. 回文子串696. 计数二进制子串647. 回文子串【题目】:【代码】:效果:696. 计数二进制子串【题目】:【代码】:效果:...原创 2019-06-01 16:22:22 · 251 阅读 · 0 评论 -
LeetCode-347. 前K个高频元素
347. 前K个高频元素【题目】:【代码】:桶排序统计出数组中元素的频次,存入map中。 设置若干个桶,每个桶存储出现频率相同的数,桶的下标表示数出现的频率,即出现频次为i 的元素存放在第i 个桶。 把数都放到桶之后,从后向前遍历桶,最先得到的 k 个数就是出现频率最多的的 k 个数。时间复杂度:O(n),其中nn表示数组的长度。 空间复杂度:O(n)效果:...原创 2019-05-29 15:27:33 · 273 阅读 · 0 评论 -
LeetCode-543. 二叉树的直径、226. 翻转二叉树
目录543. 二叉树的直径226. 翻转二叉树543. 二叉树的直径题目:代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeN...原创 2019-06-06 11:46:28 · 198 阅读 · 0 评论 -
LeetCode-75. 颜色分类(荷兰国旗问题)
75. 颜色分类【题目】:【代码】:方法1:荷兰国旗问题荷兰国旗包含三种颜色:红、白、蓝。有三种颜色的球,算法的目标是将这三种球按红、白、蓝顺序正确地排列。我们可以将数组分为三个部分:等于红色0、等于白色1、等于蓝色2。遍历数组,遇到0前移,遇到1数组不动,继续遍历,遇到2后移。分析可参考:https://www.cnblogs.com/gnuhpc/archive/2...原创 2019-05-28 21:47:21 · 353 阅读 · 0 评论 -
LeetCode-242. 有效的字母异位词、409. 最长回文串、205. 同构字符串
目录242. 有效的字母异位词409. 最长回文串205. 同构字符串242. 有效的字母异位词【题目】:【代码】:由于只含有小写字母,我们可以使用长度为 26 的整型数组分别统计字符串s,t 中字母个数。效果:409. 最长回文串【题目】:【代码】:效果:205. 同构字符串【题目】:【代码】:方法1:...原创 2019-05-31 17:11:31 · 183 阅读 · 0 评论 -
LeetCode-104. 二叉树的最大深度、110. 平衡二叉树
目录104. 二叉树的最大深度110. 平衡二叉树104. 二叉树的最大深度【题目】:【代码】:效果:110. 平衡二叉树【题目】:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。【代码】:效果:...原创 2019-06-05 20:11:07 · 297 阅读 · 0 评论 -
LeetCode-95. 不同的二叉搜索树 II
95. 不同的二叉搜索树 II【题目】:【代码】:分治法,递归求出左子树集和右子树集,然后再构造根节点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tr...原创 2019-06-05 19:42:45 · 211 阅读 · 0 评论 -
LeetCode-241. 为运算表达式设计优先级
241. 为运算表达式设计优先级【题目】:【代码】:分治法class Solution { public List<Integer> diffWaysToCompute(String input) { List<Integer> res=new ArrayList<>(); for(in...原创 2019-06-05 17:00:08 · 486 阅读 · 0 评论 -
LeetCode-204. 计数质数(厄拉多塞筛法)
目录分析204. 计数质数分析定义:质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。最小的素数是2,最小的合数是4。判断一个数是不是质数有两种方法:(1)判断一个自然数是否是质数,我们只需从i=2到是否能整除n,因为一个合数的最小正因子一...原创 2019-05-24 10:59:18 · 269 阅读 · 0 评论 -
LeetCode-128. 最长连续序列
128. 最长连续序列【题目】:【代码】:要求复杂度O(n),排序肯定不行,想到用并查集。先把数组中每个数放到HashMap中,key为该数,value都为1。 遍历数组nums,递归查找数num的前一个数,找到就修改map中的value。例如nums={100,5,200,4,3,6},遍历到5的时候,查找map中是否存在4,存在则继续查找3,3存在则继续查找2,2不存在即返回...转载 2019-06-05 11:14:59 · 1170 阅读 · 0 评论 -
LeetCode-215. 数组中的第K个最大元素
215. 数组中的第K个最大元素【题目】:【代码】:方法1:堆排序class Solution { public static int findKthLargest(int[] nums, int k) { int len = nums.length; int[] a = new int[len + 1]; int i = 1; for (in...原创 2019-05-28 16:57:49 · 182 阅读 · 0 评论 -
LeetCode-232. 用栈实现队列、225. 用队列实现栈
目录232. 用栈实现队列225. 用队列实现栈java中栈Stack的用法:https://www.runoob.com/java/java-stack-class.htmlhttps://blog.csdn.net/pengchengliu/article/details/90406218java中队列Queue的用法:https://www.cnblogs.c...原创 2019-05-29 19:09:00 · 615 阅读 · 0 评论 -
LeetCode-155. 最小栈
目录155. 最小栈155. 最小栈【题目】:【代码】:定义两个栈,dataStack存储当前入栈的数据,minStack同步存储当前入栈的元素中的最小元素。class MinStack { private Stack<Integer> dataStack; private Stack<Integer> minStack; ...原创 2019-06-14 19:53:26 · 126 阅读 · 0 评论 -
LeetCode-1. 两数之和、217. 存在重复元素、594. 最长和谐子序列(哈希表)
哈希表的应用目录1. 两数之和217. 存在重复元素594. 最长和谐子序列1. 两数之和【题目】:【代码】:public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<Integer, In...原创 2019-06-03 16:59:21 · 470 阅读 · 0 评论 -
经典排序算法java实现
目录1 插入排序2 希尔排序3 冒泡排序4 快排5 简单选择排序6 堆排序7 归并排序8 基数排序//9 计数排序//10 桶排序推荐:https://www.cnblogs.com/guoyaohua/p/8600214.html【知识框架】:稳定性:如果a原本在b前面,而a=b,排序之后a仍然在b的前面,则称这个算法是稳定的,...原创 2019-04-30 17:34:19 · 199 阅读 · 0 评论 -
LeetCode-64. 最小路径和
64. 最小路径和【题目】:【代码】:动态规划到达当前数的最小路径和为 min(到达上面的数的最小路径和,到达左边的数的最小路径和)dp式:a[i][j]=Math.min(a[i-1][j],a[i][j-1])+grid[i][j]利用一个 row*col 的矩阵 a[row][col] 记录下到达每一个格子的最小路径效果:时间复杂度O(mn),空...原创 2019-07-03 10:49:23 · 194 阅读 · 0 评论 -
LeetCode-343. 整数拆分
343. 整数拆分【题目】:【方法1】:动态规划当 n=1,返回0;n=2,返回1;n=3,返回2;思路:从n=4开始,n拆分的乘积最大值=max(j,j的乘积最大值)*max(n-j,(n-j)的乘积最大值) dp[n] = max(j,dp[j])*max(n-j,dp[n-j]) 当 j>3 的时候dp[j]>j,于是j<=3时...原创 2019-06-27 16:32:30 · 185 阅读 · 0 评论 -
LeetCode-198. 打家劫舍、213. 打家劫舍 II
目录198. 打家劫舍213. 打家劫舍 II198. 打家劫舍【题目】:【方法1】:动态规划(比较好理解,重点掌握)从后往前抢,抢到 i 时,dp[i] 的值等于max{抢劫 i 号房子,不抢劫 i }。抢劫 i ,i 后面最大利益为 dp[i-2]+nums[i] 不抢劫 i ,i 后面最大利益为 dp[i-1]dp 方程 dp[i] = ma...原创 2019-06-27 15:32:42 · 229 阅读 · 0 评论 -
LeetCode-91. 解码方法
91. 解码方法【题目】:【代码】:当计算到第 i 个数的时候,一位数字解码:当前数字为0,则需要前一个数字为1或2才能解码,这种情况算在两位数的解码方式里面 当前数字不为0,则当前数字可以解码 如果一位数可以解码,则解码方式与第 i-1 位相同,dp[i]=dp[i-1]两位数字解码:前一个数为1,后一个数任意,形如10,11,12,...,19 前一个数为2...原创 2019-07-01 20:39:28 · 297 阅读 · 0 评论 -
LeetCode-70. 爬楼梯
70. 爬楼梯更多解法参考LeetCode官方题解:https://leetcode-cn.com/problems/climbing-stairs/solution/pa-lou-ti-by-leetcode/【题目】:【方法1】:终点是第n阶台阶,那么爬楼梯的方法数就是前一步跨一阶和前一步跨两阶的数量的总和。dp[i]=dp[i-1]+dp[i-2];效果:...原创 2019-07-01 17:11:19 · 288 阅读 · 0 评论 -
LeetCode-5. 最长回文子串(中心拓展法、马拉车算法)
5. 最长回文子串【题目】:【方法1】:中心拓展法,参考647. 回文子串 // 中心拓展法 public String longestPalindrome1(String s) { if(s==null || s.length()<=1){ return s; } String res=...原创 2019-06-22 00:11:12 · 613 阅读 · 0 评论 -
LeetCode-53. 最大子序和
53. 最大子序和【题目】:【方法1】:暴力滑窗法,复杂度O(n^2)效果:【方法2】:递归分治,比较左、中、右三部分的序列和的大小。因为要求连续,所以中间部分为:中间索引向左的最大连续序列和+中间索引向右的最大连续序列和 左、右部分序列和分别是层次递归的结果。 当只有一个元素时直接返回。参考:https://www.cnblogs.com/sunnys...原创 2019-06-17 19:44:52 · 135 阅读 · 0 评论 -
LeetCode-516. 最长回文子序列
516. 最长回文子序列【题目】:【方法1】:效果:如果要求使用O(n)空间:效果:【方法2】:递归效果:原创 2019-06-16 20:40:11 · 179 阅读 · 0 评论 -
LeetCode-112. 路径总和、437. 路径总和 III
目录112. 路径总和437. 路径总和 III112. 路径总和【题目】:【代码】:效果:437. 路径总和 III【题目】:【代码】:效果:执行5ms范例中利用数组的方法也很巧妙:/** * Definition for a binary tree node. * public class TreeNod...原创 2019-06-10 21:53:27 · 204 阅读 · 0 评论 -
LeetCode-151. 翻转字符串里的单词
151. 翻转字符串里的单词【题目】:【方法1】:效果:字符串连接操作(如例1中的res=temp+res)比较慢。这是因为String类是不可变的,一旦定义好之后就不可变了,这样会造成内存浪费问题。所以,JDK为了解决字符串的内存问题,开发了StringBuffer类。另外,StringBulider类中的方法与StringBuffer中的方法完全一样。区别是,St...原创 2019-06-15 17:36:46 · 158 阅读 · 0 评论 -
LeetCode-101. 对称二叉树
101. 对称二叉树【题目】:【代码】:效果:原创 2019-06-14 19:47:36 · 172 阅读 · 0 评论 -
LeetCode-572. 另一个树的子树
572. 另一个树的子树【题目】:【代码】:效果:原创 2019-06-14 17:23:52 · 319 阅读 · 0 评论 -
LeetCode-338. 比特位计数、318. 最大单词长度乘积
目录338. 比特位计数318. 最大单词长度乘积338. 比特位计数【题目】:【代码】:方法1:使用内置函数Integer.bitCount(i)来计算1的个数。效果:方法2和方法3都是利用前面已经算好的数来计算当前数的1的个数。方法2:i >> 1会把最低位去掉,i >> 1 比i小的,是先于i算过的数。(i&...原创 2019-05-23 21:09:14 · 232 阅读 · 0 评论 -
LeetCode-693. 交替位二进制数、476. 数字的补数、371. 两整数之和
目录693. 交替位二进制数476. 数字的补数371. 两整数之和693. 交替位二进制数【题目】:【代码】:假如n=10(1010),(n>>1)=5(0101),n^(n>>1)=(1111),要么r是int类型最大值,要么r+1是2的幂。也可以直接return ((r+1)&r)==0;class Solut...原创 2019-05-23 17:35:34 · 185 阅读 · 0 评论 -
LeetCode-2. 两数相加、445. 两数相加 II、415. 字符串相加
目录445. 两数相加 II2. 两数相加445. 两数相加 II【题目】:【代码】:方法1:将两个链表的数据分别存到数组中【效果】:方法2:堆栈【效果】:写完第445题后,你会发现第2题so easy!2. 两数相加【题目】:【代码】:【结果】:415. 字符串相加【题目】:【代码】:与...原创 2019-05-10 10:26:48 · 362 阅读 · 0 评论 -
LeetCode-645. 错误的集合、766. 托普利茨矩阵(数组与矩阵)
目录645. 错误的集合766. 托普利茨矩阵645. 错误的集合【题目】:【代码】:方法1:【效果】:执行用时 :27 ms, 在Set Mismatch的Java提交中击败了34.10%的用户内存消耗 :50.6 MB, 在Set Mismatch的Java提交中击败了45.95%的用户不太好。方法2:【效果】:...原创 2019-05-14 21:33:18 · 124 阅读 · 0 评论 -
LeetCode-697. 数组的度
697. 数组的度【题目】:【代码】:方法1(执行时间慢):但是效果不好,用时154ms,执行用时战胜15.40%;看一下范例中的方法:【效果】:执行用时 :12 ms, 在Degree of an Array的Java提交中击败了93.69%的用户;内存消耗 :50.6 MB, 在Degree of an Array的Java提交中击败了32.2...原创 2019-05-14 20:18:56 · 209 阅读 · 0 评论 -
LeetCode-540、153、34. 有序数组中查找元素(二分查找)
目录540. 有序数组中的单一元素153. 寻找旋转排序数组中的最小值034. 在排序数组中查找元素的第一个和最后一个位置540. 有序数组中的单一元素【题目】:【分析】:要求在 O(log n)时间复杂度,不能用顺序查找,我们注意到令 index 为 Single Element 在数组中的位置。在 index 之后,数组中原来存在的成对状态被改变。如...原创 2019-05-19 17:32:44 · 424 阅读 · 0 评论 -
LeetCode-378. 有序矩阵中第K小的元素、287. 寻找重复数(数组与矩阵)
目录378. 有序矩阵中第K小的元素287. 寻找重复数378. 有序矩阵中第K小的元素【题目】:【代码】:二分查找法287. 寻找重复数【题目】:【代码】:二分查找法:public static int findDuplicate(int[] nums) { int l = 1, h = nums.length - 1; wh...原创 2019-05-15 16:46:31 · 149 阅读 · 0 评论 -
LeetCode-27. 移除元素、283. 移动零、237. 删除链表中的节点、203. 移除链表元素(移除数组、链表中的元素)
目录27. 移除元素283. 移动零237. 删除链表中的节点203. 移除链表元素27. 移除元素【题目】:【代码】:方法1:方法2:283. 移动零【题目】:【代码】:237. 删除链表中的节点【题目】:【代码】:203. 移除链表元素【题目】:【代码】:...原创 2019-05-06 16:07:14 · 178 阅读 · 0 评论 -
LeetCode-566. 重塑矩阵、485. 最大连续1的个数、240. 搜索二维矩阵 II(数组与矩阵)
目录566. 重塑矩阵485. 最大连续1的个数240. 搜索二维矩阵 II566. 重塑矩阵【题目】:【代码】:485. 最大连续1的个数【题目】:【代码】:240. 搜索二维矩阵 II【题目】:【代码】:...原创 2019-05-13 19:56:15 · 227 阅读 · 0 评论 -
LeetCode-160. 相交链表
目录160. 相交链表160. 相交链表【题目】:【代码】:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x;...原创 2019-05-06 10:45:03 · 122 阅读 · 0 评论