
算法
文章平均质量分 61
HCH996
一边失去,一边在寻找~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
墙与门
题目描述你被给定一个m × n的二维网格 rooms ,网格中有以下三种可能的初始化值:-1表示墙或是障碍物 0表示一扇门 INF无限表示一个空的房间。然后,我们用231 - 1 = 2147483647代表INF。你可以认为通往门的距离总是小于2147483647的。你要给每个空房间位上填上该房间到最近门的距离,如果无法到达门,则填INF即可。示例一输入:rooms = [[2147483647,-1,0,2147483647],[2147483647...原创 2021-02-18 23:08:14 · 339 阅读 · 0 评论 -
字符串编码
题目描述给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像3a或2[4]的输入。示例 1:输入:s = "3[a]2[bc]"输出:"aaabcbc"示例 ...原创 2021-02-06 12:55:51 · 734 阅读 · 1 评论 -
丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。实现代码public class Solution { public int GetUglyNumber_Solution(int index) { if(index < 7){ return index; } int原创 2021-01-20 20:40:06 · 181 阅读 · 0 评论 -
罗马数字转整数_三数之和_最接近的三数之和_电话号码的字母组合_四数之和
目录罗马数字转整数三数之和最接近的三数之和电话号码的字母组合四数之和罗马数字转整数解题思路:当前值和下一个值进行比较,如果小的话就做减法,如果是大的值就做加法class Solution { public int romanToInt(String s) { if(s == null || s.length() == 0){ return 0; } Map<Character, ...原创 2020-09-29 18:44:38 · 127 阅读 · 0 评论 -
大数相乘
牛客地址解题思路 2 1 3 1 3 9 9 18 9 27 9 18 9 27 9 6 3 9 3 6 21 36 39 36 9 8 (21+4)%10=5 (36+4)%10=0 (39+3)%10=2 36%10=6 ...原创 2020-12-14 17:59:03 · 110 阅读 · 1 评论 -
将升序数组转化为平衡二叉搜索树
牛客地址解题思路递归求解实现代码import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /** * * @param num int整型一维数组 * @return TreeNode类原创 2020-12-21 16:15:14 · 246 阅读 · 0 评论 -
课程表+判断二分图
课程表class Solution { public boolean canFinish(int numCourses, int[][] prerequisites) { if(numCourses <= 1 || prerequisites == null || prerequisites.length == 0){ return true; } List<List<Integer>> ed原创 2021-01-01 12:01:28 · 133 阅读 · 0 评论 -
最小生成树
并查集-树状结构思想:用集合中的一个元素代表集合操作合并(Union): 把两个不相交的集合合并为一个集合 查询: 查询两个元素是否在同一个集合中冗余连接分析:如果两个节点有相同的根,则连接这两个节点会导致环的出现,所以我们必须删除这条边。class Solution { public int[] findRedundantConnection(int[][] edges) { int[] pre = new int[edges.length * 2 + 1原创 2021-01-01 11:03:28 · 137 阅读 · 0 评论 -
最短路径
从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径。Dijkstra算法适用于求一个节点到其他节点的最短路径,主要特定是通过广度搜索(由远及近,层层扩展)来遍历其他所有速妖求距离的点的思想来解决最端路径的问题。起始节点A到到A节点的距离为0,到其他节点的距离都是 A B C D E 第0轮迭代 0 1 0+10 0+3 0..原创 2021-01-01 10:12:57 · 283 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历
图的表示邻接矩阵利用两个数组来表示图: 一维数组存储图中顶点信息,二维数组(邻接矩阵)存储图中的边或弧的信息。无向图的边数组是一个对称矩阵,有个顶点的话,则邻接矩阵就是一个的方针 某个顶点的度,其实就是这个顶点在邻接矩阵中第行或(第列)的元素之和; 顶点的所有邻接点就是将矩阵中第行元素扫描一遍,为1就是邻接点; 有向图讲究入度和出度,顶点的的入度为1,正好是第列各数之和。顶点的出度为2,即第行的各数之和邻接表邻接矩阵是不错的一种图存储结构,但是,对于边数相对顶点较少的图,这种结.原创 2020-12-31 22:13:10 · 574 阅读 · 1 评论 -
矩阵最长递增路径
矩阵最长递增路径解题思路深度优先搜索,由于序列递增,因此无需回溯实现代码import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 递增路径的最大长度 * @param matrix int整型二维数组 描述矩阵的每个数 * @return int整型 */ private int res = Intege原创 2020-12-28 09:03:52 · 194 阅读 · 0 评论 -
判断t1树中是否有与t2拓扑树拓扑结构完全相同的子树
判断t1树中是否有与t2拓扑树拓扑结构完全相同的子树解题思路中序遍历root1和root2,获得字符串,判断roo1是否为root2的字串实现代码import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /** *原创 2020-12-28 08:08:40 · 251 阅读 · 0 评论 -
找到搜索二叉树中两个错误的节点
找到搜索二叉树中两个错误的节点解题思路中序遍历二叉搜索树,用指针pre记录上一个访问的节点 ,找到两个逆序处cur.val < pre.val即可,注意的是第一次first=[prev, cur]中的pre, 第二次second=[prev, cur]中的cur。 因为题意最终要求返回的结果升序排列,所以返回new int{second.val, first.val}实现代码import java.util.*;/* * public class TreeNode { *原创 2020-12-27 12:03:46 · 1372 阅读 · 6 评论 -
买卖股票的最好时机
牛客网地址解题思路:利用两个遍历,一个是min另外一个是profitimport java.util.*;public class Solution { /** * * @param prices int整型一维数组 * @return int整型 */ public int maxProfit (int[] prices) { // write code here if(prices == nu原创 2020-12-04 11:30:46 · 138 阅读 · 0 评论 -
表达式求值
牛客地址解题思路初始化sign = '+'遍历字符数组(while i < cArray.length): 如果为运算符,则用其更新sign符号,continue 否则:(需要计算待加入栈中的num值, 有以下两种情况)如果当前c = '(', 则找到其对应的配置的')’处j,递归调用函数 num = solve(i + 1, j), i = j +1;否则:i一直++,直到彻底得到一个完整的数字 num 根据之前的sign为;对应得往栈中添加合理的数...原创 2020-12-26 20:13:58 · 146 阅读 · 0 评论 -
矩阵乘法
牛客地址解题思路模拟矩阵乘法,注意循环中是使用的am,an,还是bm和bn实现代码import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param a int整型二维数组 第一个矩阵 * @param b int整型二维数组 第二个矩阵 * @return int整型二维数组 */原创 2020-12-22 17:14:02 · 91 阅读 · 0 评论 -
有关阶乘的两个问题
牛客地址解题思路要相乘产生0,那肯定是与5相乘的结果。对n!如果分解质因数的话,结果为0的个数只与2与5的个数有关,每一次2*5就能产生一个0。因为2的个数肯定要大于5的个数,所以只要关注5的个数就可以了.实现代码import java.util.*;public class Solution { /** * the number of 0 * @param n long长整型 the number * @return long长整型原创 2020-12-22 17:01:03 · 158 阅读 · 0 评论 -
分糖果问题
牛客地址解题思路来回倒一遍,从左往右,如果arr[i] > arr[i-1] 则 tmp[i] = tmp[i-1] +1从右往左,如果arr[j] > arr[j+1] 则 tmp[i] = Math.max(tmp[i], tmp[i+1] + 1); //注意:这里不是直接的tmp[i+1] + 1, 而是还需要和tmp[i]比较,选择其中最大的那个源代码如下import java.util.*;public class Solution { /**原创 2020-12-22 16:37:36 · 170 阅读 · 0 评论 -
旋转数组
牛客地址解题思路三次反转实现代码import java.util.*;public class Solution { /** * 旋转数组 * @param n int整型 数组长度 * @param m int整型 右移距离 * @param a int整型一维数组 给定数组 * @return int整型一维数组 */ public int[] solve (int n, int m, int[] a)原创 2020-12-20 18:46:44 · 83 阅读 · 0 评论 -
N皇后问题
牛客地址解题思路利用boolean[] visited数组加以辅助, 表示第i个位置是否可以放置。nums[i] 表示第i个皇后放置的列号。dfs(int[] nums, int cur, int n):将第cur个皇后进行放置在每次放置前,先遍历之前已经完成放置的cur - 1个皇后。for i = 0 to cur - 1 int v = nums[i];//得到皇后的位置,将visited[v]设置为false, 表示第cur个皇后不能放置在v列。 ...原创 2020-12-20 18:35:58 · 163 阅读 · 0 评论 -
输出二叉树的右视图
牛客地址实现代码import java.util.*;class TreeNode{ int val; public TreeNode(int val){ this.val = val; } TreeNode left; TreeNode right;}public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 求二叉树的右视图原创 2020-12-19 21:27:33 · 232 阅读 · 1 评论 -
换钱的最少货币数
牛客地址解题思路: 动态规划(不能使用贪心!!!)1. 状态转移方程2. 初始化边界注意初始化为MAX_VALUE - 1, 因为后面有加1的操作,直接设置为MAX_VALUE的话结果不对。实现代码import java.util.*;public class Solution { /** * 最少货币数 * @param arr int整型一维数组 the array * @param aim int整型 the target原创 2020-12-19 20:17:12 · 139 阅读 · 1 评论 -
优先队列和堆
首先把数组的n个数建成一棵大小为的大根堆,堆顶是整个所有元素中的最大值,把堆顶元素和堆的最后一个位置的元素进行交换,然后把最大值脱离出整个堆结构,放在数组的最后位置,作为数组的有序部分保存下来,接下来把大小为n-1的堆从上往下进行大根堆的调整(向下调整),调整出n-1个数中的最大值放在堆顶的位置,然后再把堆顶的值和整个堆中最后一个位置的值交换,同样作为整个数组的有序部分脱离出整个堆, 堆的大小从n-1变成了n-2,重复上面的过程,不断从堆顶往下调整,每次堆的大小都会减1, 数组的有序部分也会依次增加,当原创 2020-12-18 10:17:02 · 162 阅读 · 0 评论 -
缺失数字
题目描述从0,1,2,...,n这n+1个数中选择n个数,组成有序数组,找出这n个数中缺失的那个数,要求O(n)尽可能小。解题思路-位运算假设缺的数字为xa可以表示为下标范围为因此从到,进行异或操作,res初始化为, 就能得到缺失的数字实现代码 */ public int solve (int[] a) { // write code here int len = a.length; int res = le.原创 2020-12-17 21:57:43 · 197 阅读 · 0 评论 -
数组中的逆序对
牛客地址解题思路利用归并排序(a) 把长度为4的数组分解成两个长度为2的子数组; (b) 把长度为2的数组分解成两个成都为1的子数组; (c) 把长度为1的子数组合并、排序并统计逆序对; (d) 把长度为2的子数组合并、排序,并统计逆序对;合并并统计逆序对的过程先用两个指针指向两个子数组的末尾,并每次比较两个指针指向的数字。如果第一个数组中的数字大于第二个数组中的数字,则会构成逆序对,并且增加的逆序对的数目等于第二个子数组中属于数字的个数。实现代码public...原创 2020-12-17 21:32:21 · 106 阅读 · 0 评论 -
环形链表的约瑟夫问题
牛客地址解题思路import java.util.*;public class Solution { /** * * @param n int整型 * @param m int整型 * @return int整型 */ class Ring{ class RingNode{ int val; RingNode next; public原创 2020-12-17 20:43:17 · 115 阅读 · 0 评论 -
随时找到数据流中的中位数
利用一个大顶堆maxHeap,一个小顶堆minHeap,保存元素(在添加的过程中,始终保持大顶堆中的所有元素都小于小顶堆中的元素,即maxHeap.peek() < minHeap.peek())1. 对于吐出的每一个元素num, 如果为添加(1) 优先考虑加入maxHeap, 加入条件是:maxHeap为空; num < maxHeap.peek(); minHeap非空且num < minHeap.peek();(2) 否则加入minHeap;(3) 调整这两个堆原创 2020-12-17 10:20:54 · 249 阅读 · 0 评论 -
二进制中1的个数
牛客地址实现代码public class Solution { public int NumberOf1(int n) { int count = 0; while(n != 0){ count ++; n &= (n-1); } return count; }}原创 2020-12-17 09:07:47 · 70 阅读 · 1 评论 -
二叉树中是否存在节点和为指定值的路径
牛客地址解题思路递归求解,只要一个表达函数即可实现代码import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /** * * @param root TreeNode类 * @param su原创 2020-12-16 20:43:51 · 128 阅读 · 0 评论 -
最长公共前缀
牛客地址import java.util.*;public class Solution { /** * * @param strs string字符串一维数组 * @return string字符串 */ public String longestCommonPrefix (String[] strs) { // write code here if(strs == null || strs.lengt原创 2020-12-15 18:26:03 · 86 阅读 · 0 评论 -
寻找峰值
牛客地址解题思路因为nums[-1] = nums[n] = -Inf :所以先要判断边界的情况实现代码import java.util.*;public class Solution { /** * 寻找最后的山峰 * @param a int整型一维数组 * @return int整型 */ public int solve (int[] a) { // write code here if原创 2020-12-15 18:07:16 · 202 阅读 · 0 评论 -
集合的所有子集
牛客地址解题思路假设集合的大小为n,则子集的个数为从遍历,对每一个数字进行二进制的判断。实现代码import java.util.*;public class Solution { private ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); public ArrayList<ArrayList<Integer原创 2020-12-15 17:54:01 · 580 阅读 · 0 评论 -
把数字翻译成字符串
牛客地址解题思路递归dp[i] = dp[i-1]如果当前遍历到的字符为’0'如果上一个字符不为1且不为2,直接返回0;否则dp[i] = dp[i-2].否则如果上一个字符和当前字符组合的值在11-26之间: dp[i] += dp[i-2](如果i-2越界的话直接加1即可)实现代码import java.util.*;public class Solution { /** * 解码 * @param nums string字符串原创 2020-12-15 17:14:53 · 165 阅读 · 0 评论 -
数组中的最长连续子序列
牛客地址实现代码import java.util.*;public class Solution { /** * max increasing subsequence * @param arr int整型一维数组 the array * @return int整型 */ public int MLS (int[] arr) { // write code here if(arr == null || ar原创 2020-12-15 16:18:59 · 300 阅读 · 0 评论 -
回文数字
牛客地址代码实现import java.util.*;public class Solution { /** * * @param x int整型 * @return bool布尔型 */ public boolean isPalindrome (int x) { // write code here if(x < 0){ return false; }原创 2020-12-15 16:15:34 · 76 阅读 · 0 评论 -
二叉树的序列化和反序列化
牛客地址解题思路先序遍历序列化如果是null,则表示为#,先序遍历序列化。 否则表示为node.val,反序列化利用一个全局变量。如果非空,则继续递归创建。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/原创 2020-12-15 16:11:23 · 111 阅读 · 1 评论 -
判断一棵二叉树是否为搜索二叉树和完全二叉树
目录完全二叉树定义完全二叉树的判断实现代码二叉搜索树实现代码完全二叉树定义在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~2^h个节点。完全二叉树的判断采用按层遍历二叉树的方式,从每层的左边向右边依次遍历所有的节点 如果当前节点有右孩子,但没有左孩子,直接返回false 如果当前节点并不是左右孩子全有,那之后的必须全为叶节点,否则返回false...原创 2020-12-13 17:26:14 · 129 阅读 · 0 评论 -
删除有序链表中重复的元素
解题思路: 哨兵机制+三个指针牛客地址实现代码import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solution { /** * * @param head ListNode类 * @return ListNode类 */ public ListNode d原创 2020-12-13 16:58:33 · 141 阅读 · 0 评论 -
加起来和为目标值的组合
牛客地址解题思路深搜实现代码import java.util.*;public class Solution { private ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); public ArrayList<ArrayList<Integer>> combinationSum2(int[] num,原创 2020-12-13 16:43:58 · 307 阅读 · 0 评论 -
矩阵元素查找
牛客地址解题思路从右上角的元素开始查找实现代码import java.util.*;public class Finder { public int[] findElement(int[][] mat, int n, int m, int x) { // write code here int[] res = {-1, -1}; if(mat == null || mat.length == 0){ ret原创 2020-12-13 16:42:45 · 139 阅读 · 0 评论