- 博客(32)
- 资源 (1)
- 收藏
- 关注
原创 [LeetCode] 810. 黑板异或游戏 Java/C++ 原来是道数学推理题?
Java/C++ 原来是道数学推理题?链接:https://leetcode-cn.com/problems/chalkboard-xor-game/solution/javac-yuan-lai-shi-dao-shu-xue-tui-li-ti-jrwx/解题思路怎么才能赢?如果数组长度为偶数,那么怎么拿,Alice都赢但如果长度是奇数呢?奇数就输了吗?不一定,如果数组本来异或结果就为0,那么Alice还是赢所以,根据这两点,就可以写出答案了!Java:class Solution {
2021-05-22 08:53:14
157
原创 【LeetCode】1035. 不相交的线 (Java/C++ 动态规划)
Java/C++ 动态规划链接:https://leetcode-cn.com/problems/uncrossed-lines/solution/javac-dong-tai-gui-hua-by-oyzg-tmyk/解题思路:1.dp[i][j]代表数组A[0…i]和数组B[0…j]的最大连线数2.推导公式:分2种情况:(1)如果A数组和B数组的最后一个数相等,dp[i][j] = dp[i-1][j-1]+1;(2)如果不相等,dp[i][j] = Math.max(dp[i-1][j]
2021-05-21 10:00:56
287
1
原创 LeetCode 1738. 找出第 K 大的异或坐标值(Java动态规划)
Java 原数组动态规划+优先队列链接:https://leetcode-cn.com/problems/find-kth-largest-xor-coordinate-value/solution/java-yuan-shu-zu-dong-tai-gui-hua-you-xi-ypar/解题思路1.含义:dp[i][j]代表(i,j)位的异或和2.推导公式:dp[i][j] = matrix[i][j]dp[i-1][j-1]dp[i-1][j]^dp[i][j-1];3.初始化:对所有i=0
2021-05-19 08:33:07
164
原创 LeetCode 1442. 形成两个异或相等数组的三元组数目 Java
链接:https://leetcode-cn.com/problems/count-triplets-that-can-form-two-arrays-of-equal-xor/solution/java-shuang-bai-jie-fa-by-oyzg-t3x0/解题思路a==b所以a^b=0 即 arr[i]…arr[k] = 0;代码:class Solution { public int countTriplets(int[] arr) { int count =.
2021-05-18 09:36:03
156
原创 [LeetCode]993. 二叉树的堂兄弟节点(Java/c++ DFS)
Java/c++ DFS链接:https://leetcode-cn.com/problems/cousins-in-binary-tree/solution/java-jie-jin-shuang-bai-by-oyzg-95kt/解题思路遍历树,找到x和y的深度和父节点即可代码:Java:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode le
2021-05-17 09:51:13
148
原创 LeetCode 421. 数组中两个数的最大异或值 Java 前缀树
Java 前缀树链接:https://leetcode-cn.com/problems/maximum-xor-of-two-numbers-in-an-array/solution/java-qian-zhui-shu-by-oyzg-ualc/这里我只画了5和25了代码:class Solution { class Node { //只有0和1两种可能 Node[] children = new Node[2]; } static final int MAX_BIT =
2021-05-16 10:14:49
167
原创 LeetCode 13. 罗马数字转整数 java 两种解法
解题思路方法一:1.用哈希表记录每个字母对应的值2.遍历字符串,如果当前这个字母比后面那个字母小,就减当前字母的值,否则就加方法二:模拟代码:方法一:class Solution { public int romanToInt(String s) { Map<Character, Integer> map = new HashMap<Character, Integer>() {{ put('I', 1); put('V', 5);
2021-05-15 09:05:38
123
原创 LeetCode 12. 整数转罗马数字 Java/C++ 贪心算法
Java/C++ 贪心算法Java:class Solution { public String intToRoman(int num) { StringBuilder s = new StringBuilder(); int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; String[] romans = {"M", "CM", "D", "CD", "C", "XC", "L",
2021-05-14 09:36:11
140
原创 LeetCode 1269. 停在原地的方案数 (Java 记忆化,动态规划)
Java 记忆化,动态规划回溯+记忆化class Solution { private final int m = 1000000007; //map用来记录 private Map<String, Integer> map = new HashMap<String, Integer>(); public int numWays(int steps, int arrLen) { return dfs(steps,arrLen,0); } /**
2021-05-13 09:32:24
162
原创 LeetCode 1829. 每个查询的最大异或值 Java位运算(超简单的思路)
Java 位运算 (方法二超简单)链接:https://leetcode-cn.com/problems/maximum-xor-for-each-query/solution/java-wei-yun-suan-fang-fa-er-chao-jian-d-ietn/解题思路方法一:首先要知道异或是什么? 同0异1;要使nums[0] XOR nums[1] XOR … XOR nums[i] XOR k最大那么就要先求出nums[0] XOR nums[1] XOR … XOR nums[i
2021-05-12 21:00:24
3383
1
原创 LeetCode 1310. 子数组异或查询 Java/C++ 前缀和
Java/C++ 前缀和链接:https://leetcode-cn.com/problems/xor-queries-of-a-subarray/solution/javac-qian-zhui-he-by-oyzg-wtva/解题思路利用异或具有 x^x = 0;的特点用数组encoded记录从头异或到arr[i-1]的结果[l,r]的异或结果就等于 [1,l-1]1的结果 因为前l-1个数都异或了2次,就抵消了代码:java:class Solution { public in
2021-05-12 09:36:25
283
1
原创 LeetCode 872. 叶子相似的树 Java/C++ 递归法&迭代法
Java/C++ 递归法&迭代法链接:https://leetcode-cn.com/problems/leaf-similar-trees/solution/javac-di-gui-fa-die-dai-fa-by-oyzg-8ngi/解题思路两种方法:方法一:dfs 前序遍历 用两个集合装叶子节点然后判断两个集合是否相同方法二:迭代法 用栈模拟递归用一个集合装root1的叶子节点遍历root2时判断2个叶子节点序列是否相等方法一:Java代码:/** * Defin
2021-05-10 10:54:24
126
原创 1482. 制作 m 束花所需的最少天数 (Java/c++二分查找)
Java/c++二分查找解题思路如果答案存在,则答案在bloomDay的最小数和最大数之间,所以我们在这个区间里面二分查找即可写一个函数判断当天数为mid时,是否可以摘m束花Java代码:class Solution { public int minDays(int[] bloomDay, int m, int k) { int n = bloomDay.length; //如果n<m*n则答案不存在 if(n < m*k) return -1; //求最大值和
2021-05-09 09:08:12
211
原创 LeetCode1723. 完成所有工作的最短时间 Java回溯+剪枝(详解)
1723. 完成所有工作的最短时间链接:https://leetcode-cn.com/problems/find-minimum-time-to-finish-all-jobs/solution/javahui-su-jian-zhi-by-oyzg-409h/class Solution { /** * 最小的 工人最大用时 */ private int minId = Integer.MAX_VALUE; public int minimumTimeRequired(int
2021-05-08 08:54:42
395
3
原创 LeetCode1486. 数组异或操作(Java/c++ 暴力模拟)
1486. 数组异或操作解题思路直接暴力模拟代码:java:class Solution { public int xorOperation(int n, int start) { int num = 0; int sum = 0; for(int i = 0; i < n; i++) { num = start+i*2; sum ^= num; } return sum; }}c++:class Solution {pu
2021-05-07 07:37:27
111
原创 LeetCode1720. 解码异或后的数组(位运算)
1720. 解码异或后的数组链接:https://leetcode-cn.com/problems/decode-xored-array/solution/javac-li-yong-yi-huo-yun-suan-te-dian-by-59f2/解题思路利用异或运算 x^0 = x; x^x = 0;的特点,得出ans[i] = ans[i-1]^encoded[i-1];java代码:class Solution { public int[] decode(int[] encoded,
2021-05-06 10:00:02
122
原创 LeetCode740. 删除并获得点数(java/c++动态规划)
740. 删除并获得点数(动态规划)链接:https://leetcode-cn.com/problems/delete-and-earn/solution/javadong-tai-gui-hua-100da-jia-jie-she-b-n5o7/解题思路没做过打家劫舍的可以先做做198.打家劫舍创建一个新数组count,对nums[i]计数,将这个题转换为打家劫舍的思路推导公式为 dp[i] = Math.max(dp[i-1], dp[i-2]+count[i]*i);代码:class
2021-05-05 08:50:11
1515
2
原创 LeetCode1473. 粉刷房子 III(三维动态规划)
链接:https://leetcode-cn.com/problems/paint-house-iii/solution/javasan-wei-dong-tai-gui-hua-by-oyzg-qujd/解题思路参考Qian神的讲解https://leetcode-cn.com/problems/paint-house-iii/solution/c-san-wei-dong-tai-gui-hua-by-qiank-yn5l/1.dp[i][j][k]代表前i个房子组成j个街区,且第i个房子颜色为k
2021-05-04 10:41:12
180
原创 LeetCode554. 砖墙(Java HashMap 统计前缀和)
554. 砖墙(Java HashMap 统计前缀和)链接:https://leetcode-cn.com/problems/brick-wall/solution/554-zhuan-qiang-java-hashmap-tong-ji-qia-ol5r/解题思路用HashMap来统计 key 为 边界下标, value 为 key为边界的次数统计出来后遍历,找到出现次数最多的边界用n-这个数 就是 答案class Solution { public int leastBricks(L
2021-05-02 08:54:35
152
原创 LeetCode238. 除自身以外数组的乘积
238. 除自身以外数组的乘积链接:(https://leetcode-cn.com/problems/product-of-array-except-self/solution/zuo-bian-de-shu-cheng-yi-you-bian-de-shu-wn33/)解题思路除自身以外数组的乘积 = 这个数左边的乘积X这个数右边的乘积代码:class Solution { public int[] productExceptSelf(int[] nums) { in
2021-05-01 09:59:25
92
原创 LeetCode690. 员工的重要性(BFS || DFS)
690. 员工的重要性(BFS || DFS)链接:https://leetcode-cn.com/problems/employee-importance/solution/690-yuan-gong-de-zhong-yao-xing-bfs-dfs-zaf51/解题思路方法一:DFS,遍历一遍集合,找到id等于给定id的Emlpoyee,然后递归查找下属的重要性方法二:BFS,先遍历一遍,用Map记录id和对应的下标,然后BFS查找下属这里我一开始想成图了,还用Set来去重,后来发现不会
2021-05-01 09:25:00
149
原创 LeetCode137. 只出现一次的数字 II(Java排序)
137. 只出现一次的数字 II(Java排序)链接:https://leetcode-cn.com/problems/single-number-ii/solution/137-zhi-chu-xian-yi-ci-de-shu-zi-iijavap-vl8q/解题思路:解法一:哈希表,用Map记录元素个数,找到个数为1的即可(这个方法我没写了)解法二:排序,如果和后面的数相等,直接跳过这个3个,否则,直接返回这个数class Solution { public int single
2021-04-30 12:17:34
72
原创 LeeCode148. 排序链表(两种解法)
148. 排序链表链接:https://leetcode-cn.com/problems/sort-list/solution/148-pai-xu-lian-biao-by-oyzg-sta1/解题思路解法一:用一个容器来装入每个节点,然后再排序,我这里使用的是ArrayList解法二:插入排序代码:解法一:/** * Definition for singly-linked list. * public class ListNode { * int val; *
2021-04-29 09:39:15
96
1
原创 LeetCode633. 平方数之和(Set,双指针)
633. 平方数之和(Set,双指针)链接:https://leetcode-cn.com/problems/sum-of-square-numbers/solution/633-ping-fang-shu-zhi-he-setshuang-zhi-z-vh55/解题思路解法一:使用set记录所有小于等于c的平方数,然后遍历,看set中是否包含c-i*i;解法二:双指针,i = 0,j = c的平方根,如果ii+jj小于c,i++,r-如果大于c,j-;代码:解法一: public boo
2021-04-28 09:02:21
97
1
原创 LeetCode938. 二叉搜索树的范围和(DFS,BFS)
938. 二叉搜索树的范围和(DFS,BFS)链接:https://leetcode-cn.com/problems/range-sum-of-bst/solution/938-er-cha-sou-suo-shu-de-fan-wei-he-dfs-i4mo/解法一:DFS:中序遍历二叉搜索树 private int sum = 0; public int rangeSumBST(TreeNode root, int low, int high) { if(root == null
2021-04-27 08:33:36
102
原创 LeetCode1011. 在 D 天内送达包裹的能力(二分查找)
1011. 在 D 天内送达包裹的能力(二分查找)解题思路:先写一个方法判断船的最大运载重量为H时能否在D天内运完然后二分查找就好了暂时没有想到其他方法了class Solution { public int shipWithinDays(int[] weights, int D) { int left = 0; int right = 0; for(int i = 0; i < weights.length; i++) { le
2021-04-26 10:23:13
98
原创 图解:LeetCode897. 递增顺序搜索树(递归解法)
图解:LeetCode897. 递增顺序搜索树(递归解法)解题思路排列成一个递增顺序搜索树 即 将root移至root左子树的最右边的叶子结点的right上,并且root的right等于右子树的最左叶子节点例:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]1.将root移至root左子树的最右边的叶子结点的right上2.root的right等于右子树的最左叶子节点3.然后递归处理root原来的左节点和右节点即可第一次画图,画的不好,请见
2021-04-25 09:41:22
202
原创 LeetCode377.组合总和 Ⅳ(java动态规划)(背包问题)
377.组合总和 Ⅳ(java动态规划)(背包问题)解题思路背包问题i代表背包容量,j代表可选择的数组范围[0,j]初始化:容量为0时,组合总数为1 所以dp[0] = 1;推导公式:dp[i] += dp[i-nums[j]];class Solution { public int combinationSum4(int[] nums, int target) { int[] dp = new int[target+1]; dp[0] = 1;
2021-04-24 14:26:41
238
原创 两行搞定LeetCode215. 数组中的第K个最大元素
215. 数组中的第K个最大元素https://leetcode-cn.com/problems/kth-largest-element-in-an-array/solution/liang-xing-gao-ding-javapai-xu-by-oyzg-jxkz/class Solution { public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); return nums[nums.length
2021-04-24 14:22:34
75
原创 368.最大整除子集(动态规划)
368.最大整除子集(动态规划)解题思路此处撰写解题思路1.list.get(i)代表以nums[i]为结尾的集合的最大整除子集2.推导公式:*遍历i之前的所有结果*如果nums[i]%nums[j] == 0:list.get(i) = list.get(j)的复制*遍历完后,在当前子集后加上nums[i]3.初始化:list.add(new ArrayList<>());list.get(0).add(nums[0]);注意:1.要先将数组排序2.cur = new
2021-04-23 13:07:44
192
原创 LeetCode114.二叉树展开为链表(Java递归)
LeetCode114.二叉树展开为链表(Java递归)解题思路将根节点的右节点连接到左子树最右边的叶子节点的右节点上即可/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = va
2021-04-22 09:32:18
194
原创 LeetCode105.从前序与中序遍历序列构造二叉树(递归)
LeetCode105.从前序与中序遍历序列构造二叉树(递归)解题思路此处撰写解题思路1.前序遍历序列的第一个元素为根节点2.在中序遍历序列中找到这个元素,记录位置inindex3.中序遍历序列中,inindex左边为左子树的中序遍历序列,长度为 len1=inindex-inleft,即[0,inindex-1],inindex右边为右子树的中序遍历序列, 长度为len2=inright-inindex-1, 即[inindex+1,inright];4.前序遍历序列中,[preleft
2021-04-21 21:24:36
80
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人