随笔分类 - 算法
摘要:1、环形链表(是否有环) 思路:快慢指针 /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = n
阅读全文
摘要:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。 '.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 来源:力扣(LeetCode)链接:https://leetcode-cn.c
阅读全文
摘要:描述给定一个二叉树的根节点root,该树的节点值都在数字0−9 之间,每一条从根节点到叶子节点的路径都可以用一个数字表示。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n 例如根节点到
阅读全文
摘要:描述给定一个链表,请判断该链表是否为回文结构。回文是指该字符串正序逆序完全一致。 思路: public boolean isPail (ListNode head) { ListNode node = head; LinkedList<Integer> list = new LinkedList<>
阅读全文
摘要:描述给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。 当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 'A' 表示此位为 10 , 'B' 表示此位为 11 。 若 M 为负数,应在结果中保留负号。 思路:map记录对应的值,ke
阅读全文
摘要:描述给定一个字符串数组,再给定整数 k ,请返回出现次数前k名的字符串和对应的次数。返回的答案应该按字符串出现频率由高到低排序。如果不同的字符串有相同出现频率,按字典序排序。对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。比如"ah1x"小于"ahb","
阅读全文
摘要:1、若是左括号 则ops存入2、若是右括号 则循环找到最近的左括号 (a & b) ,再左括号之前,若有运算符,则计算;否则(及等于左括号)移除队列最后符号3、若是运算符或者数字3.1、若是数字,则当前下标后的所有连续数字,存入nums中,最后i重新赋值到最后连续的数字下标,如i=2, 333, j
阅读全文
摘要:描述 给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。 例如:当输入[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]时,对应的返回值为12, 所选择的最小累
阅读全文
摘要:给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 答案: public class Solution { private boolean flag; public boolean IsBalanced
阅读全文
摘要:给定一个长度为 n 的字符串,请编写一个函数判断该字符串是否回文。如果是回文请返回true,否则返回false。 字符串回文指该字符串正序与其逆序逐字符一致。 数据范围:0 < n \le 10000000<n≤1000000 要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n) imp
阅读全文
摘要:给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例:给定二叉树 [3,9,20,null,null,15,7], 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems
阅读全文
摘要:给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 进阶: 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? 方法1:归并排序+使用辅助函数 import java.util.*; /* * public class ListNode { *
阅读全文
摘要:给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 示例 1: 输入:grid = [ ["1","1","1","1","0"], ["
阅读全文
摘要:1、跳台阶/楼梯 public class Solution { public int jumpFloor(int target) { int p = 1, q = 1; //和自下而上的方法使用相同的循环结构 for(int i = 2; i <= target; i++) { int temp
阅读全文
摘要:描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 思路:重建&层次遍历记录最后一个&Lambda表达式 答案: import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定
阅读全文
摘要:1、算法介绍 (1)三要素 路径、选择列表、结束条件 (2)算法框架 void backtracking(){ if(终止条件) { 记录结果; return; } for(集合){ 做选择; 递归操作; 撤销选择; } } (3)算法分类 排列、组合、子集、分割、棋盘 排组子分棋 2、排列 (1)
阅读全文
摘要:1、判断平衡二叉树 思路:辅助函数输出子树长度&全局变量在两个函数内修改 public class Solution { private boolean flag; public boolean IsBalanced_Solution(TreeNode root) { if(root == null
阅读全文
摘要:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 方法1:暴力求解(超时) import java.util.*; public class Solution { /** * max water * @param arr int整型一维数组 the
阅读全文
摘要:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0
阅读全文
摘要:描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。 此栈包含的方法有:push(value):将value压入栈中pop():弹出栈顶元素top():获取栈顶元素min():获取栈中最小元素 方
阅读全文