- 博客(105)
- 资源 (16)
- 问答 (1)
- 收藏
- 关注
原创 递归: 如何逆序一个栈(不使用其余数据结构)
递归: 如何逆序一个栈(不使用其余数据结构)代码参考:package leetcode.editor.algorithms;import java.util.Stack;public class ReverseStack { public static void main(String[] args) { ReverseStack reverseStack = new ReverseStack(); Stack<Integer> st.
2022-03-12 13:10:12
799
原创 背包-最小不可组成和
题目:给定一个数组arr, 求出最小不可组成和比如数组arr [1,3,5,7], 其范围为[min,sum]即[1,16]最小不可组成和是2本题实际上是背包问题,可以使用递归,动态规划解决该题.代码:private int getMinCantCompose(int[] arr) { int min = Integer.MAX_VALUE; int sum = 0; for (int i = 0 ; i < arr.length; i+
2022-03-06 19:44:28
7637
原创 堆- 取两数组sum topK
题目是存在两个数组(有序)arr1, arr2, 再给一个正整数K, 返回分别来自两个数组的数字相加的和 最大的前K个。分析题目,首先该题一定是从最后的两个数组的最后索引的数字相加的和是最大的sum和,然后从最后的格子分别向左和向上走,通过最大堆的方式来处理结果。代码:package leetcode.editor.algorithms;import org.checkerframework.checker.units.qual.K;import java.util.Arrays;impor
2022-03-06 11:56:27
344
原创 深度优先遍历-130. 被围绕的区域
题目里面被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’, 那么就意味着我们可以反其道而行之,凡是以边界的O开始连接的O都是不能被替换为X的,经过所有边界遍历之后,剩余下来的O则都需要替换为X就可以了。代码如下:/** * 题目Id:130 * 题目:被围绕的区域 * 内容: //给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充//。// //.
2022-03-02 23:40:00
210
原创 深度优先遍历-200. 岛屿数量
方法1 :假设不能修改原始的数组,那么我们需要额外使用一个数组记录数据是否访问过,然后针对每一个为1的数据,通过深搜找到最大联通的岛屿,并将连接的岛屿置为访问过。 这样深搜的次数就是最终岛屿的数量。代码如下:public int numIslands(char[][] grid) { int[][] visited = new int[grid.length][grid[0].length]; int sum = 0; for (int i = 0 ;.
2022-03-02 22:55:11
312
原创 P387字符串中的第一个唯一字符
题目字符串中的第一个唯一字符给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。示例 1:输入: s = “leetcode”输出: 0示例 2:输入: s = “loveleetcode”输出: 2示例 3:输入: s = “aabb”输出: -1解法一:使用字符数组存储字符索引因为题目全是小写字母,这里就可以使用26范围大小的数组来完成字典映射,比如字符a,对应的数组位置为’a’-‘a’ = 0, 数组位置记录原始字符串数字字符
2022-02-27 14:49:28
92
原创 图结构-997
这个其实就是图里面的星形网络,中心点就是小镇法官。 他的特点就是入度是n - 1, 出度是0。 所以对应的java代码如下:class Solution { public int findJudge(int n, int[][] trust) { int[] inDegrees = new int[n + 1]; int[] outDegrees = new int[n + 1]; for (int[] edge : trust) { .
2022-02-23 00:05:54
7589
原创 图-133. 克隆图
题目:本题属于图这种数据结构的一个题目,可以通过深度优先遍历来求解。因为考虑到无向图,为了完成整张图的遍历,我们需要记录访问过得节点,以防止重复遍历,陷入死循环之中。Java实现代码如下:class Node { public int val; public List<Node> neighbors; public Node() { val = 0; neighbors = new Arra
2022-02-21 23:28:50
217
原创 Volatile可见性问题
public class VolatileVisualTest { // volatile 无法保证原子性 public static final int clientTotal = 1000; public static final int threadTotal = 200; private static int i = 0; public static void main(String[] args) { Thread t1 = ne
2021-12-12 13:19:43
337
原创 递归专项-230. 二叉搜索树中第K小的元素
题目:因为二叉搜索树本身的先序排列是有序的,因此这里求取第k个最小值,可以极大复用该能力。代码:class Solution { public int kthSmallest(TreeNode root, int k) { return kthSmallestDg(root, k); } int i = 0; public int kthSmallestDg(TreeNode root, int k) { if.
2021-12-06 23:53:00
334
原创 递归专项-108. 将有序数组转换为二叉搜索树
题目因为题目是需要求取高度平衡的二叉搜索树,因此需要考虑列表的有序性解决该问题。class Solution { public TreeNode sortedArrayToBST(int[] nums) { return sortedArrayToBSTDg(nums, 0, nums.length - 1); } private TreeNode sortedArrayToBSTDg(int[] nums, int i, int j) { .
2021-12-06 23:29:26
150
原创 递归专项-129. 求根节点到叶节点数字之和
题目:code 如下:class Solution { public int sumNumbers(TreeNode root) { return sumNumbersDg(root, 0); } private int sumNumbersDg(TreeNode cur, int sum) { if (cur == null) { return 0; } if (cur.l.
2021-12-05 20:45:56
294
原创 递归专项-235. 二叉搜索树的最近公共祖先
题目当p,q 都小于当前节点的属性值时,说明其在左子树, 如果都大于当前节点的属性值时,说明其在右子树。code 如下:class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if (root == null) { return null; } if (p.val < roo.
2021-12-05 20:32:31
207
原创 递归专项-257. 二叉树的所有路径
题目257. 二叉树的所有路径给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。 示例 1:输入:root = [1,2,3,null,5]输出:["1->2->5","1->3"]示例 2:输入:root = [1]输出:["1"]递归带返回值:code :class Solution { public List<String> binaryTreePath.
2021-12-02 00:04:50
229
原创 递归专项-404. 左叶子之和
题目该题目也要注意要计算的是叶子节点。 当只有一个根节点的时候,这时候实际上是不能算进内的。code:class Solution { public int sumOfLeftLeaves(TreeNode root) { return sumOfLeftLeavesDg(root, -1); } private int sumOfLeftLeavesDg(TreeNode cur, int direction) { // 一定是先会递归到叶子节.
2021-11-28 22:59:21
188
原创 递归专项-112. 路径总和
题目本题的一个注意点是计算的路径是从根节点到叶子节点的路径和,结尾是叶子节点(不能是根节点)code:class Solution { public boolean hasPathSum(TreeNode root, int targetSum) { return hasPathSumDg(root, targetSum); } private boolean hasPathSumDg(TreeNode cur, int sum) { .
2021-11-28 22:40:34
296
原创 递归专项-110. 平衡二叉树
题目code:class Solution { public boolean isBalanced(TreeNode root) { isBalancedDg(root); return flag; } boolean flag = true; private int isBalancedDg(TreeNode root) { if (root == null) { return 0; .
2021-11-28 22:17:07
164
原创 递归专项-222. 完全二叉树的节点个数
题目code:class Solution { public int countNodes(TreeNode root) { return countNodesDg(root); } private int countNodesDg(TreeNode root) { if (root == null) { return 0; } return countNodes(root.le.
2021-11-28 21:51:14
73
原创 递归专项-101. 对称二叉树
题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3该题目属于二叉树递归练习中的一道简单题。本质是处理镜像对称问题。 思路代码如下:class Solution { public boole.
2021-11-28 21:29:06
77
原创 递归专项-N叉树最大深度
题目该题目是简单的一道递归题目,针对任意一个子树,分别遍历其根节点的所有孩子节点的每个深度,取出最大的那个深度即可。代码如下:import common.NxNode;public class P559MaximumDepthOfNAryTree { public static void main(String[] args) { Solution solution = new P559MaximumDepthOfNAryTree().new Solution();.
2021-11-28 20:08:59
139
原创 递归专项- 记忆化搜索397. 整数替换
题目给定一个正整数 n ,你可以做如下操作:如果 n 是偶数,则用 n / 2替换 n 。如果 n 是奇数,则可以用 n + 1或n - 1替换 n 。n 变为 1 所需的最小替换次数是多少?示例 1:输入:n = 8输出:3解释:8 -> 4 -> 2 -> 1示例 2:输入:n = 7输出:4解释:7 -> 8 -> 4 -> 2 -> 1或 7 -> 6 -> 3 -> 2 -> 1示例 3:输入
2021-11-21 22:21:52
192
原创 递归专项-前缀树应用P677MapSum
题目实现一个 MapSum 类,支持两个方法,insert 和 sum:MapSum() 初始化 MapSum 对象void insert(String key, int val) 插入 key-val 键值对,字符串表示键 key ,整数表示值 val 。如果键 key 已经存在,那么原来的键值对将被替代成新的键值对。int sum(string prefix) 返回所有以该前缀 prefix 开头的键 key 的值的总和。 示例:输入:["MapSum", "insert", .
2021-11-18 22:57:13
172
原创 递归专项-给定一个二叉树计算 整个树的坡度
题目给定一个二叉树,计算 整个树 的坡度 。一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。整个树 的坡度就是其所有节点的坡度之和。示例 1:输入:root = [1,2,3]输出:1解释:节点 2 的坡度:|0-0| = 0(没有子节点)节点 3 的坡度:|0-0| = 0(没有子节点)节点 1 的坡度:|2-3| = 1(左子树就是左子节点,.
2021-11-18 22:48:17
137
原创 递归专项-前缀树应用211. 添加与搜索单词 - 数据结构设计
题目:请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。实现词典类 WordDictionary :WordDictionary() 初始化词典对象void addWord(word) 将 word 添加到数据结构中,之后可以对它进行匹配bool search(word) 如果数据结构中存在字符串与 word 匹配,则返回 true ;否则,返回 false 。word 中可能包含一些 '.' ,每个 . 都可以表示任何一个字母。 示例:输入.
2021-11-14 18:31:48
127
原创 递归专项-数据结构-前缀树
前缀树前缀树是一种特殊的树,非常适合于处理一些字符串相关的问题。使用了前缀树其查询性能与有多少个字符串无关,而仅仅与字符串的长度有关。针对与一些英语单词或者一些有字符组成的串,往往长度实际情况下并不是很长,那么这种就特别适合于使用前缀树进行查询或者检索,性能会比较好。但是往往提升这么好的查询性能,就需要牺牲掉空间复杂度,因此前缀树Trie的问题也是在与空间占用较大。一棵形象的前缀树如下所示:我们使用递归方式来实现前缀树的插入操作, 查询操作,检索操作。插入操作的递归方式如下:public v.
2021-11-14 17:45:54
672
原创 递归专项-数据结构-线段树
线段树比如我们有一个大小为6的数组,其索引为0,1,2,3,4,5,那么我们就可以构建出如下的一颗线段树,下图所示:考虑到一棵完全二叉树,假设右k层,则其总数为2^0 + 2 ^1 +… + 2 ^k= 2^(k + 1) - 1,所以针对一棵线段树,其最好情况下是一棵满二叉树,这时候线段是的大小为2 * n即可,但是往往由于数据因素可能会变成一课完全二叉树,而不是恰好就是满二叉树,这时候如果需要涵盖所有的数据,就需要开辟2 * (2 * n) 才行【即多开一层空间】所以根据上面的阐述,假.
2021-11-13 20:20:01
536
原创 递归专项-100. 相同的树
题目递归的不断判断是否相等即可,比较容易。 代码如下:class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { return dgCheckSame(p, q); } private boolean dgCheckSame(TreeNode p, TreeNode q) { if (p == null && q == null) { .
2021-11-08 23:19:16
59
原创 普通题-299. 猜数字游戏
题目先进行比对找出相同并且位置一致的值,然后针对剩下的值通过一个’0’-'9’的数组进行比对,针对原始字符串没有一个值则对应的数字字符的个数+1,然后guess的字符则对对应的数字字符的个数-1. code 代码如下:class Solution { public String getHint(String v1, String v2) {int sameValueAndPos = 0; StringBuilder sub1 = new StringBuilder();.
2021-11-08 22:37:21
2204
原创 递归专项-不同的二叉搜索树
题目本地思路是先通过递归回溯法进行不断地组合,然后针对每次返回的组合结果进行copy备份,并进行去重,留下去重后的二叉搜索树。递归的核心思路:递归核心代码如下:/** * * @param n : 代表总共进行多少次递归 * @param node : 符合条件的头结点 * @param index: 当前到了第几次了 * @param arr: 用于定义已经遍历过得结点 * @par.
2021-11-07 17:02:31
137
原创 普通题-[500] 键盘行
题目普通题目,主要是通过一个数组来控制下映射字母的位置即可。这里不用使用map,字母26个可以创建一个26空间大小的数组。代码如下package questionsimport "unicode"/* * @lc app=leetcode.cn id=500 lang=golang * * [500] 键盘行 */// @lc code=startfunc findWords(words []string) []string { var chacter [26]rune .
2021-11-07 16:45:42
84
原创 递归专项-869. 重新排序得到 2 的幂
题目该处是为了训练递归,并非是为了获取最优解。 首先我们可以定义一个是否是2的次幂的函数,之后是取得排列的思想,获取该字符串的排列,然后分别去判断该排列对应的数字是否是2的次幂,这里需要去除0开头的排列代码:package questionsimport ( "strconv")/* * @lc app=leetcode.cn id=869 lang=golang * * [869] 重新排序得到 2 的幂 */// @lc code=startfunc reorder.
2021-11-02 22:27:06
98
原创 单调栈问题-下一个更大元素 I
题目使用单调栈来进行维护所有的下一个第一个最大值代码:class Solution { public int[] nextGreaterElement(int[] nums1, int[] nums2) { Stack<Integer> stack = new Stack<>(); Map<Integer, Integer> result = new HashMap<>(); for (i.
2021-10-26 23:16:56
125
原创 递归专项-合并两个有序的单链表
题目递归解法:/** * 题目Id:剑指 Offer 25 * 题目:合并两个排序的链表 * 内容: //输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 //// 示例1: //// 输入:1->2->4, 1->3->4//输出:1->1->2->3->4->4 //// 限制: //// 0 <= 链表长度 <= 1000 //// 注意:本题与主站 21 题相同:htt
2021-10-23 20:28:30
197
原创 递归专项-链表问题
题目code/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next
2021-10-23 20:28:19
59
原创 递归专项-链表求和问题
题目:递归不断求解。需要考虑是否结果有进位和借位代码如下:class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dg = dg(l1, l2, 0); return dg; } private ListNode dg(ListNode l1, ListNode l2, int jiewei) { if (l.
2021-10-23 20:27:44
303
原创 递归专项-括号问题
题目起点必须是(,终点必须是),中间的点可以选择( 或者 ), 不过需要保证一一对应代码class Solution { public List<String> generateParenthesis(int n) { if (n <= 0) { return new ArrayList<>(); } List<String> re = new ArrayList<&.
2021-10-23 20:22:31
85
原创 递归专项-链表反转与回文链表
题目可以以递归的思路解决问题, 实际上递归到最后一个节点开始翻转指向,然后逐步递归处理上一个节点,即可完成所有节点的逆转代码:/** * 题目Id:剑指 Offer II 024 * 题目:反转链表 * 内容: //给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。 //// // // //// 示例 1: //// //输入:head = [1,2,3,4,5]//输出:[5,4,3,2,1]// //// 示例 2: //// .
2021-10-17 20:57:11
218
原创 递归 OR 动态规划专项-背包
问题背包问题:0-1背包问题:n件物品,它们装入背包所占的容量分别为w1、w2……wn;它们所拥有的价值分别为v1、v2 ……vn;有一个总容量为C的背包;在装满背包的情况下,如何使得包内的总价值最大递归解法方法一:/** * 代表获取在index位置选择或者不选择获取的最大的价值 * @param w * @param p * @param index: 代表0.。。index-1 已经选择好了,index.... 待自由选择 * @par.
2021-10-17 12:53:14
74
原创 Pytorch 简单线性规划
定性简单的逻辑回归:class LR(object): def __init__(self,w,b,lr): self.w = w self.b = b self.lr = lr def foward(self, X): return self.w * X + b def backward(self, loss): loss.backward() def update(self,w, b)
2020-11-29 22:41:04
645
3
原创 卷积网络
1最终目标图卷积是卷积网络在图上的扩展,变得更加复杂,不过其中还是涉及到了卷积思想, 因此本处主要是基本说明了一些卷积网络的相关知识点。2卷积卷积就是记住一个字, 滑窗。实时卷积与离线卷积。首先看下实时卷积。离线卷积可以看到卷积的奥义实际上就是固定一个函数不动, 将另一个函数先翻转然后开始滑窗。上面离线卷积我们看到了一维情况下的过程, 如果是2维矩阵呢?下面给出矩阵的例子。上面我们推导计算了二维矩阵的卷积过程, 那如果是三维呢?其过程如下图所示。多通道的卷积核:假设我们有3232
2020-11-23 13:33:02
654
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅