LeetCode
baldist
这个作者很懒,什么都没留下…
展开
-
各种常见排序
1.堆排序关键步骤: //nowIndex 为当前要调整的非叶结点,tail为最后一个叶结点 private void downAdjust(int []arr,int nowIndex,int tail) { int i=nowIndex; int j=nowIndex*2+1; //当j>tail时,意味着以nowIndex为祖先的所有子节点都遍历了,直接跳出循环 while (j<=tail) {原创 2021-06-03 21:49:28 · 73 阅读 · 0 评论 -
leetcode附录02
class Solution {// 一步步详解桶算法,因为自己看了很多遍,看的简直头皮发麻public int maximumGap(int[] nums) { // n int n = nums.length; // 低于两个数不用比较 if (n < 2) { return 0; } int minVal = Arrays.stream(nums).min().getAsInt(); // 计算最小值 int ma原创 2021-04-09 11:58:21 · 56 阅读 · 0 评论 -
LeetCode专题一:Array
一.27,26,80其中:26和80有固定模板,见:https://blog.csdn.net/baldist/article/details/115342357原创 2021-03-31 09:23:06 · 113 阅读 · 1 评论 -
LeetCode附录01
public int removeDuplicates(int[] nums,int k) { if (nums.length<=k) return nums.length; int l=k-1; int tag=2; for (int i=k;i<nums.length;i++) { if (nums[l-k+1]!=nums[i]) {原创 2021-03-31 09:22:24 · 49 阅读 · 0 评论 -
LeetCode(十)二叉树相关-二叉搜索树-#701
701. 二叉搜索树中的插入操作1.题目描述及示例题目描述示例2.题解思路及代码思路简单,略。代码public TreeNode insertIntoBST(TreeNode root, int val) { if (root==null) return new TreeNode(val); TreeNode p=root; while (true) { if原创 2020-11-03 20:37:07 · 59 阅读 · 0 评论 -
LeetCode(十)二叉树相关-二叉搜索树-#450
450. 删除二叉搜索树中的节点1.题目描述及示例题目描述示例2.题解思路及代码思路设root为要删除的节点,用先序遍历。如果root为叶子节点,返回null。如果root的左孩子不空,找到root的左子树的最大值所在的节点l,让l的右孩子指向root的右子树。最后,返回root的左孩子。如果root的右孩子不空,找到root的右子树的最小值所在的节点r,让r的左孩子指向root的左子树。最后,返回root的右孩子。代码public TreeNode d原创 2020-11-03 20:30:22 · 54 阅读 · 0 评论 -
LeetCode(十)二叉树相关-二叉搜索树-#98
110. 平衡二叉树1.题目描述及示例题目描述示例2.题解思路及代码思路用中序遍历,如果序列一直严格递增就是二叉搜索树;否则,不是。代码 Stack<Integer> stack=new Stack<>(); boolean tag=true; public boolean isValidBST(TreeNode root) { inOrder(root); return tag;原创 2020-11-03 20:11:31 · 63 阅读 · 0 评论 -
LeetCode(十)二叉树相关-#110
110. 平衡二叉树1.题目描述及示例题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例2.题解思路及代码思路简单,略。代码 boolean tag=true; public boolean isBalanced(TreeNode root) { preOrder(root); return tag; }原创 2020-10-31 16:10:33 · 80 阅读 · 0 评论 -
LeetCode(十)二叉树遍历相关-层次遍历-#102
102. 二叉树的层序遍历1.题目描述及示例题目描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例2.题解思路及代码思路主要是怎么确定每层有多少个。当第i层的第一个节点开始出队时,第i+1层的第一个节点开始入队。当第i层的最后一个节点出队时,第i+1层的最后一个节点也入队了。也就是说,此时队里只有i+1层的节点。这样一层层的遍历。代码public List<List<Integer>> levelO原创 2020-10-31 16:04:45 · 91 阅读 · 0 评论 -
LeetCode(十)二叉树遍历相关-二叉树非递归遍历
一.前序 #144 public List<Integer> preorderTraversal(TreeNode root) { List<Integer>list=new ArrayList<>(); TreeNode p=root; Stack<TreeNode> stack=new Stack<>(); if (p!=null) stack原创 2020-10-31 15:51:22 · 70 阅读 · 0 评论 -
LeetCode(十)二叉树相关-#1325
public TreeNode removeLeafNodes(TreeNode root, int target) { root=postOrder(root,target); return root; } public TreeNode postOrder(TreeNode root,int target) { if (root!=null) { root.left=postOrder(roo原创 2020-10-28 18:01:54 · 117 阅读 · 0 评论 -
LeetCode(十)二叉树相关-#236
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { return postOrder(root,p,q); } public TreeNode postOrder(TreeNode root, TreeNode p, TreeNode q) { if (root==null) return null; ...原创 2020-10-28 17:46:50 · 62 阅读 · 0 评论 -
LeetCode(十)二叉树相关-#226
public TreeNode invertTree(TreeNode root) { invert(root); return root; } public void invert(TreeNode root) { if (root!=null){ TreeNode temp=root.left; root.left=root.rig...原创 2020-10-28 17:34:18 · 48 阅读 · 0 评论 -
LeetCode(十)二叉树相关-#104
int max=0; public int maxDepth(TreeNode root) { if (root!=null) { preOrder(root,1); return max; } return 0; } public void preOrder(TreeNode root,int depth) { ...原创 2020-10-28 17:32:01 · 53 阅读 · 0 评论 -
LeetCode(十)二叉树相关-#101
int tag=0; public boolean isSymmetric(TreeNode root) { if (root==null) return true; TreeNode left=root.left; TreeNode right=root.right; isSame(left,right); if (tag==1) ...原创 2020-10-27 15:22:24 · 60 阅读 · 0 评论 -
LeetCode(九)堆相关-#347
215. 数组中的第K个最大元素1.题目描述及示例题目描述给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例2.题解思路及代码思路(1)这种题目最适合用堆排序,参考算法笔记的内容(2)前期需要记录不同的数字出现的次数,但题中没有给出数的范围,不能用数组散列的方式,只能用map记录。代码 class Node { int id; int count; public Node(int id,int count原创 2020-10-24 18:41:18 · 65 阅读 · 0 评论 -
LeetCode(九)堆相关-#215
215. 数组中的第K个最大元素1.题目描述及示例题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例2.题解思路及代码思路(1)参考算法笔记的内容(2)通常情况下,非叶节点的下标是i,则其左孩子的下标为2 * i。但数组的下标是从0开始而不是从1开始,所以下标要调整,非叶节点的下标是i,则其左孩子的下标为2*i-1。代码 public int findKthLargest(int[] n原创 2020-10-23 15:38:33 · 59 阅读 · 0 评论 -
LeetCode(八)栈相关-#316
316. 去除重复字母1.题目描述及示例题目描述给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例2.题解思路及代码思路参考:https://leetcode-cn.com/problems/remove-duplicate-letters/solution/you-qian-ru-shen-dan-diao-zhan-si-lu-qu-chu-zhong-/代码 publ原创 2020-10-23 08:51:07 · 103 阅读 · 0 评论 -
LeetCode(八)栈相关-#224
224. 基本计算器1.题目描述及示例题目描述实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。示例2.题解思路及代码思路参考《算法笔记》中,关于栈这节的内容代码 public int calculate(String s) { s=s.trim(); int [] nums=new int[s.length()]; int原创 2020-10-22 16:07:48 · 67 阅读 · 0 评论 -
LeetCode(八)栈相关-#20
20. 有效的括号1.题目描述及示例题目描述示例2.题解思路及代码思路比较简单,略。代码 public boolean isValid(String s) { char[] chars=new char[s.length()]; int i=0; if (s==null||s.length()==0) return true; for (int j=0;j<s.lengt原创 2020-10-20 17:55:44 · 79 阅读 · 0 评论 -
LeetCode(七)数组操作-#945
945. 使数组唯一的最小增量1.题目描述及示例题目描述给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。返回使 A 中的每个值都是唯一的最少操作次数。示例2.题解思路及代码思路先排序,再依次遍历数组元素,若当前元素小于等于它前一个元素,则将其变为前一个数 +1。这是比较常规的方法,最屌的方法见第二个代码块代码//常规思路 public int minIncrementForUnique(int[] A) { int原创 2020-10-19 10:55:12 · 85 阅读 · 0 评论 -
LeetCode(七)数组操作-#581
581. 最短无序连续子数组1.题目描述及示例题目描述给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例2.题解思路及代码思路要找到失序数字中的最大值和最小值,以及它们所处的位置(1)对数组中的递减序列,找到这些序列的最大值和最小值。例如:(一){2,6,4,8,10,9,15}中,递减序列有{6,4}和{10,9},所以min=4,max=10,然后找到min和max在数原创 2020-10-19 10:38:45 · 93 阅读 · 0 评论 -
LeetCode(七)数组操作-#78
List<List<Integer>> res = new ArrayList<>(1 << nums.length); //先添加一个空的集合 res.add(new ArrayList<>()); for (int num : nums) { //每遍历一个元素就在之前子集中的每个集合追加这个元素,让他变成新的子集 for (int i = 0, j = res.size(); i...原创 2020-10-19 09:42:38 · 110 阅读 · 0 评论 -
LeetCode(七)数组操作-#73
public void setZero(int[][] matrix,int i,int j,int unique) { for (int jj=j-1;jj>=0;jj--) { if (matrix[i][jj]!=0) matrix[i][jj]=unique; } for (int ii=i-1;ii>=0;ii--) { ...原创 2020-10-19 09:25:06 · 110 阅读 · 0 评论 -
LeetCode(七)数组操作-#54
public List<Integer> spiralOrder(int[][] matrix) { List<Integer>list=new ArrayList<Integer>(); if (matrix.length==0||matrix==null) return list; int length=matrix[0].length; int height=原创 2020-10-19 09:05:49 · 89 阅读 · 0 评论 -
LeetCode(六)数字操作-#258
public int addDigits(int num) { if (num%9==0) return (num==0)? 0:9; else return num%9; }原创 2020-10-17 10:25:00 · 99 阅读 · 0 评论 -
LeetCode(六)数字操作-#172
public int trailingZeroes(int n) { int num=0; while (n>=5) { num+=n/5; n/=5; } return num; }原创 2020-10-17 10:12:56 · 59 阅读 · 0 评论 -
LeetCode(六)数字操作-#43
public String multiply(String num1, String num2) { if (num1.equals("0")||num2.equals("0")) return "0"; if (num1.length()<num2.length()) { String temp=num1; num1=num2; num2=temp...原创 2020-10-17 09:32:19 · 74 阅读 · 0 评论 -
LeetCode(六)数字操作-#9
public boolean isPalindrome(int x) { // 特殊情况: // 如上所述,当 x < 0 时,x 不是回文数。 // 同样地,如果数字的最后一位是 0,为了使该数字为回文, // 则其第一位数字也应该是 0 // 只有 0 满足这一属性 if (x < 0 || (x % 10 == 0 && x != 0)) { re...原创 2020-10-17 09:26:41 · 150 阅读 · 0 评论 -
LeetCode(六)数字操作-#8
public int myAtoi(String s) { int tag=0; int start=0; for (int i=0;i<s.length();i++) { char c=s.charAt(i); if (c==' ') continue; else if (c=='-') { ...原创 2020-10-17 09:16:07 · 92 阅读 · 0 评论 -
LeetCode(六)数字操作-#7
public int reverse(int x) { int res = 0; while(x!=0) { //每次取末尾数字 int tmp = x%10; //判断是否 大于 最大32位整数 if (res>214748364 || (res==214748364 && tmp>7)) { return 0;...原创 2020-10-17 08:49:46 · 92 阅读 · 0 评论 -
LeetCode(五)字符串操作-#763
763. 划分字母区间1.题目描述及示例题目描述字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例2.题解思路及代码思路我的思路其实和标准答案差不多,只是没有从一开始就把每个字母在字符串中最后出现的位置记录下来,所以在分段的时候做了大量重复工作。代码public List<Integer> partitionLabels(String S) {原创 2020-10-10 18:47:26 · 114 阅读 · 0 评论 -
LeetCode(五)字符串操作-#14
14. 最长公共前缀1.题目描述及示例题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例2.题解思路及代码思路这里说明一下,我的思路有点挫,这个是别人的思路代码 public String longestCommonPrefix(String[] strs) { if(strs.length == 0) return ""; String ans =原创 2020-10-10 18:38:49 · 130 阅读 · 0 评论 -
LeetCode(五)字符串操作-#6
6. Z 字形变换1.题目描述及示例题目描述示例2.题解思路及代码思路我的思路不太好用语言描述,numRows代表z字形状有多少行,0 ~ numRows-1行算一种情况,1 ~ numRows-2行算一种情况,两种情况分别处理。。。。。。。。。。。。算了,看别人的解析吧,他的思路要简洁一些https://leetcode-cn.com/problems/zigzag-conversion/solution/zzi-xing-bian-huan-by-jyd/代码原创 2020-10-08 15:46:25 · 99 阅读 · 0 评论 -
LeetCode(四)区间合并-#56
56. 合并区间1.题目描述及示例题目描述给出一个区间的集合,请合并所有重叠的区间。示例2.题解思路及代码思路先对二维数组按第一列元素升序排序,咋写的要记住,经常忘记,之后的思路和#26《删除排序数组中的重复项》差不多。代码public int[][] merge(int[][] intervals) { if (intervals.length<=1) return intervals; Arra原创 2020-10-07 14:36:53 · 104 阅读 · 0 评论 -
LeetCode(三)快慢指针-#202
202. 快乐数1.题目描述及示例题目描述编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例2.题解思路及代码思路定义:正整数按各个位上的数先平方,再相加求和,这种运算称为f运算,记作f(x)。例如:x=19,f原创 2020-10-06 18:35:17 · 81 阅读 · 0 评论 -
LeetCode(三)快慢指针-#876
876. 链表的中间结点1.题目描述及示例题目描述给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例示例1输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val原创 2020-10-06 17:32:43 · 54 阅读 · 0 评论 -
LeetCode(三)快慢指针-#141
141. 环形链表1.题目描述及示例题目描述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。示例2.题解思路及代码太简单,略。...原创 2020-10-06 17:29:06 · 83 阅读 · 0 评论 -
LeetCode(三)快慢指针-#209
public int maxProfit(int[] prices) { if (prices.length<=1) return 0; int profits=0; int minPos=0; for (int i=1;i<prices.length;i++) { if (prices[i]>prices[minPos]) {原创 2020-10-06 16:34:26 · 61 阅读 · 0 评论 -
LeetCode(三)快慢指针-#121
public int minSubArrayLen(int s, int[] nums) { int n = nums.length; if (n == 0) { return 0; } int ans = Integer.MAX_VALUE; int start = 0, end = 0; int sum = 0; while (end < n) { ...原创 2020-10-06 16:07:52 · 85 阅读 · 0 评论