牛客刷题
恋志传奇
这个作者很懒,什么都没留下…
展开
-
BM46 最小的K个数
1、题目2、思路 最简单的一种方式就是排序后,取前k个值,即可。关键在在于你怎么选择以及写排序算法。3、代码import java.util.ArrayList;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> ret= new Arr...原创 2022-04-01 17:00:56 · 213 阅读 · 0 评论 -
BM45 滑动窗口的最大值
1、题目2、思路 这是一个属于较难的题,来吧,挑战一下!3、代码import java.util.*;public class Solution { public ArrayList<Integer> maxInWindows(int [] num, int size) { ArrayList<Integer> list=new ArrayList<Integer> (); ...原创 2022-04-01 15:55:58 · 188 阅读 · 0 评论 -
BM44 有效括号序列
1、题目2、思路 这题,我不记得哪里抄的了,我觉得很精妙,反向思维,,直接看代码,代码中我都给出注释。。3、代码import java.util.*;public class Solution { /** * * @param s string字符串 * @return bool布尔型 */ public boolean isValid (String s) { // write code ...原创 2022-04-01 15:18:34 · 131 阅读 · 0 评论 -
BM43 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。原创 2022-04-01 15:08:59 · 551 阅读 · 0 评论 -
BM42 用两个栈实现队列
1、题目2、思路题目的要求很明确,使用两个栈要模拟一个队列。简单的描述一下:建立两个栈,第一个进栈栈模拟的为进入队列,只要进入队列,就掉用该方法。 第二步,出队列的话,使用第二个栈,如果第一个栈不空,则将第一个栈内的所有元素全部转移到第二个栈内,然后就可以对第二个栈进行出栈的操作。下面是我抄来的图,,羞耻哈!3、代码import java.util.Stack;public class Solution { // 1、初始化两个栈 Stack<.原创 2022-04-01 14:47:47 · 155 阅读 · 0 评论 -
BM41 输出二叉树的右视图
1、题目2、思路 我没有思路。。哭!3、代码import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 求二叉树的右视图 * @param xianxu int整型一维数组 先序遍历 * @param zhongxu int整型一维数组 中序遍历 * @return int整型一维数组 ...原创 2022-03-31 20:08:25 · 959 阅读 · 0 评论 -
BM40 重建二叉树
1、题目2、思路给定节点数为 n 的二叉树的前序遍历和中序遍历结果,可以重建出该二叉树,我相信大家都可以手推出来过程吧,考过研的可以参考王道的数据结构,我记得本科课本里也有,这里主要关注的是代码逻辑。3、代码import java.util.*;/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode ri原创 2022-03-31 19:52:46 · 266 阅读 · 0 评论 -
BM39 序列化二叉树
1、题目2、思路 哈哈,这题我做不来。。。3、代码 这里给大家找了一份能跑的代码,其实也不是很难,做到这,我懒得想了。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/...原创 2022-03-31 19:38:25 · 120 阅读 · 0 评论 -
BM38 在二叉树中找到两个节点的最近公共祖先
1、题目2、思路这题与上一题的区别,就是这里只是普通的树,比上题要难一些; 这里抄了一下别人的题解:核心思想:分析可知,对于节点 o1, o2 的最近公共祖先,只存在三种情况:o1 ,o2 分别位于root的左右子树上 o1 = root, 且 o2 位于root的左子树/右子树中 o2 = root, 且 o1 位于root的左子树/右子树中 于是,可以通过递归解决本题递归情况:1.当到达空节点(既叶子节点的子节点)时,直接返回空2.当root等于原创 2022-03-31 19:33:48 · 274 阅读 · 0 评论 -
BM37 二叉搜索树的最近公共祖先
1、题目2、思路又来了,同志们,二叉搜索树,其特点,左右与根的关系,我就不多说了。这里我们可以看成三种的情况:如果,p,q两个目标节点,其中一个值为root,则返回当前节点 如果,p,q 分别位于某节点的两端,则返回此节点 如果,两者位于同一侧,则进行递归下去,直到结束都没有则返回-13、代码import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = nul原创 2022-03-31 19:16:05 · 223 阅读 · 0 评论 -
BM36 判断是不是平衡二叉树
1、题目2、思路① 求树的高度②递归左右子树 ③判断左右树的高度相差3、代码public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root==null){ return true; } int left = depth(root.l...原创 2022-03-31 19:08:35 · 913 阅读 · 0 评论 -
BM35 判断是不是完全二叉树
判断完全二叉树原创 2022-03-31 17:27:38 · 518 阅读 · 0 评论 -
BM34 判断是不是二叉搜索树
判断是不是二叉搜索树原创 2022-03-31 16:03:34 · 141 阅读 · 0 评论 -
BM33 二叉树的镜像
算法、树、java原创 2022-03-31 15:55:59 · 278 阅读 · 0 评论 -
BM32 合并二叉树
1、题目2、思路首先判断两个树的根节点,是否为空,有一个为空则直接返回不为空的。其次,选择一颗树的根节点作为最终的树,最后依次向下递归以及判断。具体的看代码,很简单哈!3、代码import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solutio.原创 2022-03-30 17:11:34 · 209 阅读 · 0 评论 -
BM31 对称的二叉树
1、题目2、思路 直接对根节点的左右子树进行地柜判断,只要两边的值相同,则是为对称的树。3、代码/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution ...原创 2022-03-30 16:52:56 · 431 阅读 · 0 评论 -
BM30 二叉搜索树与双向链表(树转双向链表)
1、题目2、思路 先看条件:题目给定的是二叉搜索树,也就是左边小于根节点,右边大于根节点。1.使用二叉树的中序遍历可以获得一个要求链表结点的访问顺序;2.在这个顺序中,我们要存储当前的结点cur和访问前的结点pre(cur的值一定是比pre小的),3.修改pre和cur的左右指向,cur.right = pre; pre.left = cur;3、代码/**public class TreeNode { int val = 0; TreeN...原创 2022-03-23 17:38:06 · 686 阅读 · 0 评论 -
BM29 二叉树中和为某一值的路径(一)
1、题目2、思路 这题我从题解上看到一个很经典的题解,他使用sum减去每遍历一个节点的值,直到遍历过程中等于sum减去后的值。看图:,这逆向思维,佩服了!!!3、代码import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class ...原创 2022-03-23 15:31:51 · 553 阅读 · 0 评论 -
BM28 二叉树的最大深度
1、题目2、思路使用递归喽;这里放一张递归的图,来自于题解:3、代码import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /** * * @param root TreeNode类原创 2022-03-23 15:26:45 · 555 阅读 · 0 评论 -
BM27 按之字形顺序打印二叉树
1、题目2、思路使用双端队列的方式;对奇偶层分别使用不同的方式进行输出。BFS 循环: 循环打印奇 / 偶数层,当 deque 为空时跳出;1、打印奇数层: 从左向右 打印,先左后右 加入下层节点;2、若 deque 为空,说明向下无偶数层,则跳出;3、打印偶数层: 从右向左 打印,先右后左 加入下层节点;3、代码import java.util.*;/*public class TreeNode { int val = 0; TreeNode l.原创 2022-03-21 19:32:20 · 432 阅读 · 0 评论 -
BM26 求二叉树的层序遍历
BM23 24 25 属于二叉树的前中后,使用递归算是比较简单,非递归则比较难。1、题目2、思路使用队列3、代码import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /** * * @param原创 2022-03-21 16:26:32 · 606 阅读 · 0 评论 -
BM21 旋转数组的最小数字
1、题目2、思路又是时间复杂的为log2n的,想到二分查找(注意,前提是有序):这种二分查找难就难在,arr[mid]跟谁比.我们的目的是:当进行一次比较时,一定能够确定答案在mid的某一侧。一次比较为 arr[mid]跟谁比的问题。一般的比较原则有:如果有目标值target,那么直接让arr[mid] 和 target 比较即可。 如果没有目标值,一般可以考虑端点这里我们把target 看作是右端点,来进行分析,那就要分析以下三种情况,看是否可以达到上述的目标。情况1,a.原创 2022-03-21 15:39:48 · 87 阅读 · 0 评论 -
BM20 数组中的逆序对
1、题目2、思路经典题解:我这里直接抄了哈:大家可以仔细看一下这个题解,我觉得是最好懂的一个:相信大家都知道归并排序这个算法吧,如果不知道的,可以移至这里排序先去学习一波~那么,我们先来说说归并算法吧,归并算法讲究一个先分后并!先分:分呢,就是将数组分为两个子数组,两个子数组分为四个子数组,依次向下分,直到数组不能再分为止!后并:并呢,就是从最小的数组按照顺序合并,从小到大或从大到小,依次向上合并,最后得到合并完的顺序数组!介绍完归并排序,我们来说说归并统计法,我们要在哪个步原创 2022-03-21 15:21:53 · 836 阅读 · 0 评论 -
BM19 寻找峰值
1、题目2、思路一般我们看到时间复杂的要求为log2n,我们就可以考虑使用二分查找的方式。因为题目只要求我们找打一个峰值的下标,则可以考虑使用二分,如果中间值小于右边,那么右边一定存在峰值,故可以向左边进行寻找left+1;不明白的可以看下标准的题解:因为二分查找的本质是二段性,二分查找的过程本质是对可行区间的压缩。只要满足二段性的问题都可以用二分查找解决。在这里二段性的体现是峰值的左边单调增,右边单调减。你可能会反驳给我们的数值不只有一个峰值,但是只要我们控制好条件,一定可以把范围原创 2022-03-21 15:01:07 · 630 阅读 · 0 评论 -
BM18 二维数组中的查找
1、题目2、思路①利用二分查找,遍历其中的每一行,每一行都使用二分查找的方式②上面的方法不符合题目的要求,使用变体的二分查找:来自题解3、代码① 第一种方式的代码:public class Solution { public boolean Find(int target, int [][] array) { boolean tag = false; for(int i = 0 ; i<= array.leng原创 2022-03-19 21:03:11 · 137 阅读 · 0 评论 -
BM17 二分查找-I
1、题目2、思路 这个是数据结构中经典的查找算法,我想不用过多的描述吧,直接上代码:3、代码import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param target int整型 * @return int整型...原创 2022-03-19 20:17:14 · 619 阅读 · 0 评论 -
BM16 删除有序链表中重复的元素-II
1、题目2、思路 首先创建一个新的链表,设定新的头节点为res ,poc = res;同时设定一个变量记录上个数用于与本次的数进行比较。设定这个数为f,则判断条件为,poc.val!=head.val;head.val!=head.next.val;f !=head.val;这三者同时成立的时候则可以将节点拼接在poc后面。同时记得f不断的更新,以及最后一个元素是否需要加入节点。3、代码import java.util.*;/* * public class ...原创 2022-03-19 17:14:08 · 104 阅读 · 0 评论 -
BM15 删除有序链表中重复的元素-I
1、题目2、思路 这题思路较为简单:循环,如果当前值等于下一位数的值,则使用链表的方式删除,这个就是本题的一个关键之处,也是解题的关键之处,玄妙之处,可以细细品味一下代码:(不使用if判断而是使用while)3、代码import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solution { ...原创 2022-03-19 16:58:13 · 112 阅读 · 0 评论 -
BM14 链表的奇偶重排
1、题目描述2、思路 因为奇链表头位于head 偶链表头位于head.next,所以可以设定oddHead = head,evenHead = head.next;终止条件:因为even走在前面 一定先终止 所以判断条件就是它;节点总数为偶数个时 even.next为null;节点总数为奇数个时: even==null 这俩条件触发一个就跳出循环;3、代码import java.util.*;/* * public class ListNode { * ...原创 2022-03-19 16:32:46 · 85 阅读 · 0 评论 -
BM13 判断一个链表是否为回文结构
1、题目描述2、思路相信大家看过部分的题解,这里说两种:一种是将整个链表进行复制一份然后进行反转,再依次与原链表进行比较,相同则是回文结构。另外一种是快慢指针,当快指针走到结尾,慢指针走到中间,将,后半部分反转与前半部分比较。这里使用第一种的方法:3、代码import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class So原创 2022-03-19 16:25:57 · 120 阅读 · 0 评论 -
BM12 单链表的排序
1、思路我看题解给了两种思路,一种是将所有的数据取出来放入list,再进行排序,后再建立链表。另外一种就是利用归并排序的思想,可以参考BM5 我写的解法。这里使用第一种,看代码:2、代码import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solution { /** * * @para..原创 2022-03-19 14:28:42 · 422 阅读 · 0 评论 -
BM11 链表相加(二)
1、思路 肯定是用栈的嘞:说到这你就明白了吧!当然也需要一个变量来记录进位的数据了,详情看代码。import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solution { /** * * @param head1 ListNode类 * @param head2 L...原创 2022-03-19 14:16:23 · 376 阅读 · 0 评论 -
BM10 两个链表的第一个公共结点
原创 2022-03-18 16:33:25 · 232 阅读 · 0 评论 -
BM10 两个链表的第一个公共结点
1、思路这题较为简单,可以考虑求出两个链表的长度,然后长的先走,走到两个一样长,然后比较即可。2、代码/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode FindFirstCommonNode(List...原创 2022-03-18 16:32:21 · 63 阅读 · 0 评论 -
BM9 删除链表的倒数第n个节点
题解可以参考BM8 在那个基础上找到要删除节点的前一位。import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solution { /** * * @param head ListNode类 * @param n int整型 * @return ListNode类 ...原创 2022-03-18 16:19:52 · 215 阅读 · 0 评论 -
BM8 链表中倒数最后k个结点
import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 ...原创 2022-03-18 16:09:24 · 69 阅读 · 0 评论 -
BM7 链表中环的入口结点
这题是上一题的基础上进行变化。1. 先看代码:/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { ListNode fa.原创 2022-03-18 15:50:04 · 226 阅读 · 0 评论 -
BM6 判断链表中是否有环
请看别人的解题思路:/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public boolean ...原创 2022-03-18 15:39:16 · 87 阅读 · 0 评论 -
BM5 合并k个已排序的链表
,本题 可以参考-BM20数组中的逆序对的归并排序的思想(数组类型),以及相关应用别人的题解:import java.util.*;/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * .原创 2022-03-18 15:23:08 · 180 阅读 · 0 评论 -
BM4 合并两个排序的链表
/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { if(list1 == null){ re...原创 2022-03-18 14:41:33 · 120 阅读 · 0 评论