![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
花园宝宝胡图图
太菜了
展开
-
剑指 Offer 32 - III. 从上到下打印二叉树 III
打印二叉树,层次遍历的变种,既然是层次遍历,就一定需要用到队列这种数据结构,而且由于要从左到右,从右到左,因此考虑用到标志位和双端队列。单数行要从左到右打印,起始设置标志位为true,true代表从左到右打印。而双数行要从右到左打印,所以我们在打印单数行的时候,就要将下一行的添加到队列中,假设我们在打印单数行的时候,对单数行节点的子节点是采用addLast的形式插入的,比如在第一行插入第二行的节点,那么插入完成时队列的数据为[ 9,20 ]我们在第二行取得时候因为要取出20,所以标志位为fa..原创 2022-03-13 09:30:13 · 934 阅读 · 0 评论 -
有效的括号字符串
class Solution { public boolean checkValidString(String s) { int low = 0; //代表*作为右括号时左括号的数量 int high = 0; //代表*作为左括号时左括号的数量 for (int i = 0;i<s.length();i++) { char str = s.charAt(i); if (str == '(') {.原创 2022-02-21 16:14:54 · 198 阅读 · 0 评论 -
全排列问题
给定一个不含重复数字的数组,返回其所有可能的全排列。你可以按任意顺序返回答案。以[1,2,3]为例子来看,一共有六种可能情况,我需要将几种情况全部列出来,但是为了在中途避免重复的执行相同的代码,在其中加入状态来记录已经计算过的。import java.util.ArrayList;import java.util.List;class Solution { public List<List<Integer>> permute(int[] nums)...原创 2022-01-30 16:29:00 · 746 阅读 · 0 评论 -
二叉树找后继节点
class Node{ V value; Node left; Node right; Node parent;}给你二叉树中的某个节点,返回该节点的后继节点。后继节点:二叉树中序遍历中,处于某节点的下一个节点。二叉树最重要的就是分类讨论,找到分类的标准最为关键! 这道题的分类标准,就是这个子树有没有右子树,如果有右子树,后继节点就是右子树的最左节点。很容易理解,因为中序遍历是左中右顺序,以这个子树的根节点为头,遍历完根节点一定是去找右子树的最左子树。.原创 2022-01-25 10:12:41 · 354 阅读 · 0 评论 -
二叉树的序列化
会递归遍历二叉树就会序列化。package TreeTest;import java.util.LinkedList;import java.util.Queue;/** * @ProjectName: zxh0125 * @Package: TreeTest * @ClassName: SerializeTree * @Author: zxh * @Description: 序列化二叉树 * @Date: 2022/1/24 12:09 * @Version: 1.0 *.原创 2022-01-25 09:55:53 · 205 阅读 · 0 评论 -
两个链表是否相交问题
给定两个单链表的头节点 headA 和 headB ,请找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。注意:可能会出现链式结构中出现环。首先,判断单个链表是否成环,给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。很简单,快慢指针,如果成环,一定会在环内相遇,此时让fast=head,再各自一人走一步,一定会在成环位置相遇。 public ListNode d原创 2022-01-23 11:01:58 · 724 阅读 · 0 评论 -
复杂链表的复制
我们很容易可以想到HashMap的做法,但是O(n)的空间复杂度,对于链表的题而言,明显是一个减分项,因此,可以采用下面的做法:复制一个新的节点在原有节点之后,如 1 -> 2 -> 3 -> null 复制完就是 1 -> 1 -> 2 -> 2 -> 3 - > 3 -> null 从头开始遍历链表,通过 cur.next.random = cur.random.next 可以将复制节点的随机指针串起来,当然需要判断 cur.random 是否原创 2022-01-22 16:11:26 · 359 阅读 · 0 评论 -
链表的快慢指针
输入链表头节点,奇数长度返回中点,偶数长度返回上终点 /** * 输入链表头节点,奇数长度返回中点,偶数长度返回上中点 * @param head * @return */ public ListNode midOrUpMid(ListNode head) { if (head == null || head.next == null || head.next.next == null) { return.原创 2022-01-22 12:16:24 · 227 阅读 · 0 评论 -
几乎有序数组的排序
已知一个几乎有序的数组。几乎有序是指,如果把数组拍好顺序的话,每个元素移动的距离一定不超过k,并且k相对于数组长度来说是比较小的。用堆来解决这个问题,首先贴上堆结构package dataStruct;public class Heap { private int[] arr; private int heapSize; public Heap(int n) { this.arr = new int[n]; this.heapSize = 0; } public boo原创 2022-01-20 21:50:18 · 650 阅读 · 0 评论 -
Leetcode---1716. 计算力扣银行的钱
class Solution { public int totalMoney(int n) { int start = 1; int sum = 0; while(n>=7){ n-=7; sum = sum + ((start+start+6)*7)/2; start++; } sum = sum + ((start+start+n-...原创 2022-01-15 09:41:53 · 3836 阅读 · 0 评论 -
JAVA(2021-11-27)leetcode每日一题----随机翻转矩阵
class Solution { /** * map中的key和value: * key:虽然作为索引,并不一定是实际的索引值 * value:value作为返回的值,value记录的索引一定要是对应位置为0的 */ HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); Random ra = new Random(300); int m, n, ...原创 2021-11-27 10:38:47 · 330 阅读 · 0 评论 -
【JAVA】二叉树的非递归中序遍历
JAVA非递归二叉树的中序遍历原创 2021-11-26 20:59:35 · 640 阅读 · 0 评论 -
JAVA(2021-11-26)leetcode每日一题---- 二叉搜索树中的搜索
这个太简单了。。。。class Solution { public TreeNode searchBST(TreeNode root, int val) { if(root==null){ return root; } if(root.val==val){ return root; } else if(root.val<val){ ret原创 2021-11-26 20:23:49 · 290 阅读 · 0 评论 -
【JAVA】二叉树的非递归后序遍历
二叉树的非递归版后序遍历原创 2021-11-23 21:15:06 · 673 阅读 · 0 评论 -
【JAVA】二叉树的非递归前序遍历
二叉树的非递归先序遍历原创 2021-11-23 20:23:36 · 707 阅读 · 0 评论 -
JAVA(2021-11-23)leetcode每日一题---- 亲密字符串
class Solution { public boolean buddyStrings(String s, String goal) { if(s.length()!=goal.length()){ return false; } int sum = 0; int[] p1 = new int[26]; int[] p2 = new int[26]; for(int i =...原创 2021-11-23 12:21:19 · 351 阅读 · 0 评论 -
JAVA(2021-11-22)leetcode每日一题---- 打乱数组
洗牌算法,记录一下子class Solution { private int[] arr; private int n; private int[] nums; Random random = new Random(); public Solution(int[] nums) { this.arr = nums; this.nums = arr.clone(); n = nums.len...原创 2021-11-22 20:04:43 · 205 阅读 · 0 评论 -
JAVA(2021-11-21)leetcode每日一题---- N 叉树的最大深度
树形bp,递归条件:是不是有子节点,如果有:返回子树中,最大的深度 public int maxDepth(Node root) { return process(root); } public int process(Node root){ if(root==null){ return 0; } int max = 0; for(Node cur:root.child...原创 2021-11-21 15:37:26 · 244 阅读 · 0 评论 -
JAVA(2021-11-20)leetcode每日一题---- 最长和谐子序列
class Solution { public int findLHS(int[] nums) { HashMap<Integer,Integer> map = new HashMap<>(); int temp; for(int i:nums){ temp = map.getOrDefault(i,0); map.put(i,temp+1); } ...原创 2021-11-20 20:16:03 · 237 阅读 · 0 评论 -
JAVA(2021-11-19)leetcode每日一题---- 整数替换
本题我采用的贪心算法,一个数要么是偶数,要么是奇数,这显而易见,所以我们就要根据这两个条件分类讨论,如果是偶数,那么直接就除以二,操作数加1就好了如果是奇数,就要讨论一番,举一个例子,如果n为7,那么他变成8更容易,仅仅需要一次操作数就可以,但是要是变成4,就需要三次操作数,我们需要快速的判断出来要变大还是变小。我们可以通过%4操作做到,一个奇数%4,要么是3,要么是1,如果是1,比如5%4,那么我们肯定要将其变成4,即n=(n-1)/ 2,反之如果%4得3,比如7,那么一定是变成8,即n=(...原创 2021-11-19 10:00:16 · 346 阅读 · 0 评论 -
JAVA(2021-11-17)leetcode每日一题---- 最大单词长度乘积
这个题的难点并不在于找的过程,因为没有什么可以记录的,就是要挨个比,n平方的复杂度。但是这个题的优化空间在于比较两个单词是否含有公共字母。一看到是否含有重复的,是否含有重复字符,我们就应该想到是不是可以用位运算,更准确的说是,是否可以使用异或运算,所以我们就要开始考虑是否可以将字母转换为数字表示,我们很容易想到将一个单词转为一个长度为26的二进制,a: 1 << 0 0000 0000 0000 0000 0000 0000 0001z: 1 << 25 00...原创 2021-11-18 16:32:51 · 454 阅读 · 0 评论 -
JAVA(2021-11-18)leetcode每日一题----二叉树的坡度
简单的树形bp,且返回值只有一个。看见题第一反应都是递归 ,所以要确定递归的返回值是什么,本题的返回值是该子树的值加上其左子树和右子树的值,确定了递归返回值,本题的答案也就呼之欲出了class Solution { private int res; public int findTilt(TreeNode root) { process(root); return res; } public int process(Tree..原创 2021-11-18 15:15:07 · 590 阅读 · 0 评论 -
JAVA(2021-11-15)leetcode每日一题----灯泡开关
class Solution { public int bulbSwitch(int n) { return (int)Math.sqrt(n); }}害,这种题。。没找到规律,但是发现4-8是2,到9就是3了,试了试sqrt还对了。。。但其实,一个数x,其因数个数是奇数个可以知道x是平方数...原创 2021-11-15 09:30:12 · 95 阅读 · 0 评论 -
JAVA(2021-11-14)leetcode每日一题----键值映射
分析题目:要求的结构需要唯一的键值,即如果先后输入【apple,3】【apple,2】最后在求sum的时候需要把原来的3删掉,而符合这一属性的结构,应该就是前缀树和哈希表的结合了。class TrieNode{ public int pass; public TrieNode[] nexts; public TrieNode() { pass = 0; nexts = new TrieNode[26]; }}前缀树的结构,...原创 2021-11-14 15:20:56 · 259 阅读 · 0 评论 -
JAVA(2021-11-13)leetcode每日一题----检测大写字母
简单的字符串模拟,写的有点麻烦了class Solution { public boolean detectCapitalUse(String word) { if(word.length()<2){ return true; } char[] words = word.toCharArray(); //开头大写 if(isBig(words[0])){ i..原创 2021-11-13 12:53:50 · 443 阅读 · 0 评论 -
JAVA(2021-11-12)leetcode每日一题----猜数字大小 II
这个题个人感觉有点难,想了半天,还看了题解才写出来首先这个题要用动态规划而不是二分,二分根本做不下去。为了将支付的金额最小化,除了需要将每次支付的金额控制在较低值以外,还需要在猜数字的过程中缩小所选数字的范围。当猜了数字 xx 并且猜错时,会知道 xx 比所选数字大还是小。如果 xx 比所选数字大,则任何比 xx 大的数字一定都比所选数字大,因此应该在比 xx 小的数字中继续猜数字。如果 xx 比所选数字小,同理可知应该在比 xx 大的数字中继续猜数字。我们定义二位数组dp[ i ][ j ..原创 2021-11-12 10:44:07 · 3204 阅读 · 0 评论 -
JAVA(2021-11-10)leetcode每日一题----提莫攻击
很有意思的题目,但是本质上还是一个数组模拟的题目class Solution { public int findPoisonedDuration(int[] timeSeries, int duration) { //记录结果 int res = duration; //中毒的结束时间 int end = timeSeries[0]+duration; for(int i=1;i<timeSeries.l..原创 2021-11-10 09:36:28 · 396 阅读 · 0 评论 -
JAVA(2021-11-8)leetcode每日一题----猜数字游戏
这个题意真的很难理解,说的完全不是人话,但是其实看懂了,这个题就非常容易做了,意思就是A代表这个数在答案里并且位置也对,B代表这个数在答案里,但是位置不对。这样就非常容易理解了。最朴素解法。5msclass Solution { public String getHint(String secret, String guess) { char[] secrets = secret.toCharArray(); char[] guesses = gues...原创 2021-11-08 10:32:51 · 2762 阅读 · 0 评论 -
JAVA(2021-11-7)leetcode每日一题----范围求和 II
这个题看上去很麻烦,但其实仔细想一想,初始数组里的数字都是0,找到含有最大整数的,不就是加的次数最多的吗,我们只需要找到所有操作中的最小值再相乘就可以了。class Solution { public int maxCount(int m, int n, int[][] ops) { if(ops.length<1){ return m*n; } int mina = Integer.MAX_VALUE; ...原创 2021-11-07 09:49:48 · 111 阅读 · 0 评论 -
JAVA(2021-11-6)leetcode每日一题----丢失的数字
观察示例,我们可以发现,[0-n]中缺少的数被0替换掉了,所以我们可以换一个角度想,如果没被替换掉,原数组比现数组大缺少的值,因此我们就可以用原数组的数组和减去现数组的数组和class Solution { public int missingNumber(int[] nums) { int res = ((1+nums.length)*nums.length)/2; for(int i: nums){ res-=i; ...原创 2021-11-06 08:48:21 · 128 阅读 · 0 评论 -
JAVA(2021-11-5)leetcode每日一题----最长定差子序列
暴力穷举解法 挨个变量,没什么技术含量class Solution { public int longestSubsequence(int[] arr, int difference) { int max = Integer.MIN_VALUE; for(int i = 0;i < arr.length;i++){ int item = arr[i]; int length = 1; ...原创 2021-11-05 16:11:26 · 122 阅读 · 0 评论 -
JAVA(2021-11-4)leetcode每日一题----有效的完全平方数
力扣题目中num的取值是整个int的取值,因此1-n暴力枚举一定是不可以的,但是当我们换一个角度来看这个题的时候,我们会发现,和我们熟悉的一个算法有相同之处。 从一个有序的数组中,找出符合条件的数字,这不就是我们所熟悉的二分查找吗?找到一个平方是num的数,从1开始顺序查找。class Solution { public boolean isPerfectSquare(int num) { /*定义...原创 2021-11-04 09:15:55 · 133 阅读 · 0 评论 -
JAVA(2021-11-2)leetcode每日一题----删除链表中的节点
力扣https://leetcode-cn.com/problems/delete-node-in-a-linked-list/一般我们要删除链表中的一个节点,往往我们都需要找到要删除节点的上一个节点,让这个节点的next指向要删除节点的下一个,来达到删除的目的。 但是这个题直接给了我们当前要被删除节点,但是此时在本题的提示中,暗示了我们这个题应该怎么做即每个值是唯一的,且要删除的节点不是最后一个,因此我们可以将要删除的节点的下一个节点的值...原创 2021-11-02 09:53:53 · 104 阅读 · 0 评论