每日一题
彭于洋
这个作者很懒,什么都没留下…
展开
-
二叉树习题
一、判断两个二叉树是否相同100. 相同的树 - 力扣(LeetCode) (leetcode-cn.com)如果当前节点都为null,返回true;如果有一个为null,另外一个不为null,返回false;如果对应位置的val不同,返回fasle;递归遍历左子树和右子树。public boolean isSameTree(TreeNode p, TreeNode q) { if(p==null&&q==null)return true; .原创 2021-08-14 16:43:29 · 217 阅读 · 1 评论 -
使用数组实现循环队列
622. 设计循环队列 - 力扣(LeetCode) (leetcode-cn.com)思路:①根据给出的k值创建数组arr,大小为k创建指针head表示头,tail表示尾,注意tail所指的下标不在队列之内size用来表示当前队列中的有效元素的数量②要添加一个元素时先判断队列是否为空,如果size=arr的长度了,队列已满,添加失败如果小于,直接给tail所在的位置进行赋值,size++,同时tail移动到 下一个位置(tail+1)% arr.length..原创 2021-08-10 20:55:54 · 217 阅读 · 0 评论 -
实现最小栈
155. 最小栈 - 力扣(LeetCode) (leetcode-cn.com)思路:①用两个栈来实现最小栈的功能 stack用来存储元素,min用来存储当前stack中最小的元素②push当要存储一个元素时,stack直接存储,比较当前值和min中栈顶元素的值的大小,如果当前值较小,则将这个值也存入min中,否则再存一次min的栈顶元素注意,如果min为空的话直接存储,当前值就是最小值class MinStack { Stack<Integer>sta.原创 2021-08-10 20:09:26 · 99 阅读 · 0 评论 -
用栈实现队列
232. 用栈实现队列 - 力扣(LeetCode) (leetcode-cn.com)思路;①准备两个栈 a,b②push 操作首先将a的所有元素按照出栈的顺序入b栈将元素放入a栈,然后将所有b里面的元素按照出栈顺序放回a栈这样就可以起到每次新加的元素都在栈底(后进后出)③pop 操作返回a栈栈顶元素④每次push操作后所有元素都在a栈,所以判断是否为空就是判断a栈是否为空class MyQueue { Stack<Integer&.原创 2021-08-10 19:52:58 · 94 阅读 · 0 评论 -
用队列实现栈
225. 用队列实现栈 - 力扣(LeetCode) (leetcode-cn.com)思路:①坑定使用两个a,b 队列实现栈②当执行push操作的时候,可以先将要push的元素放入b,让后将a的所有元素依次出队,同时依次入队b,这样就使push 的元素都在队列的首位,执行完上述操作后,交换a b,保证所有的元素都在a队列里面③pop 就是a出队列,top就是a的首位元素class MyStack { public Queue<Integer>.原创 2021-08-10 17:28:54 · 77 阅读 · 0 评论 -
有效的括号
20. 有效的括号 - 力扣(LeetCode) (leetcode-cn.com)思路:当遇到右边的括号的时候,判断栈顶元素是不是对应的左括号,如果是的话就弹出栈顶元素其他情况都是将这个元素入栈注意,在判断栈顶元素的时候,需要先判断栈是否为空,如果为空的话,也是直接入栈,其实这种情况可以直接返回falseclass Solution { public boolean isValid(String s) { Stack<Character&g.原创 2021-08-10 16:54:36 · 80 阅读 · 0 评论 -
力扣杨辉三角
118. 杨辉三角 - 力扣(LeetCode) (leetcode-cn.com)思路:如果我们把杨辉三角放在一个二维数组里面不难发现它的规律假设这个数组为arr,用 i表示行,用 j 表示列,那么arr[ i ][ 0 ] =1,arr[ i ] [ i ]=1,其余的arr[i] [j]=arr[i-1][j-1]+arr[i-1][j]①新建数组,用来存储杨辉三角里面的数字②根据以上推出的规律,得出每一行的数字,并且放入List当中③将每一行的list 放入总的l...原创 2021-08-10 16:06:39 · 156 阅读 · 0 评论 -
移除链表元素
203. 移除链表元素 - 力扣(LeetCode) (leetcode-cn.com)思路:①新建傀儡节点 newhead ,用来存储删除后的链表②遍历链表,存储拿到每个节点 cur 的next,然后将每个节点的next设为null;这样就能保证在加入链表时只加入当前的节点③根据val值是否相等如果相等,直接处理下一个节点 cur=curNext;不相等,加入链表,pre指向当前节点,cur指向curNext;public ListNode removeElements.原创 2021-08-10 15:41:10 · 79 阅读 · 0 评论 -
判断链表是否有环
142. 环形链表 II - 力扣(LeetCode) (leetcode-cn.com)①判断链表是否有环②此时slow和fast已经相遇,设头节点到环入口的距离为x,设换入口到相遇节点的距离为y,相遇节点到环入口的距离为z那么可以得出slow 走了x+yfast走了 x+y+(n-1)(y+z)fast每次走两个节点,slow每次走一个所以 (x+y)* 2 = x+y+(n-1)(y+z)化简之后:x = (n - 1) (y + z) + ...原创 2021-08-08 23:37:38 · 85 阅读 · 0 评论 -
判断链表是否有环
141. 环形链表 - 力扣(LeetCode) (leetcode-cn.com)思路:快慢指针跑得快的和跑的慢的如果相遇,那就证明有环,如果期间出现null,说明没有环因为fast跑得快,因此直接用fast来判断是否为空public class Solution { public boolean hasCycle(ListNode head) { if(head==null))return false; ListNode fast=head.原创 2021-08-08 23:22:19 · 75 阅读 · 0 评论 -
求相交链表的第一个公共节点
160. 相交链表 - 力扣(LeetCode) (leetcode-cn.com)思路:因为保证了有环,定义两个指针, 第一轮让两个到达末尾的节点指向另一个链表的头部,最后如果相遇则为交点(在第一轮移动中恰好抹除了长度差)两个指针等于移动了相同的距离, 有交点就返回, 无交点就是各走了两条指针的长度public class Solution { public ListNode getIntersectionNode(ListNode headA, Lis...原创 2021-08-08 22:41:27 · 89 阅读 · 0 评论 -
判断链表是否为回文结构
思路:①找到中间节点②反转中间节点之后的所有节点③如果是回文结构的话,如下图,按位判断节点的值是否相等import java.util.*;/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class PalindromeList { publi...原创 2021-08-08 22:19:35 · 76 阅读 · 0 评论 -
删除链表中的重复节点
删除链表中重复的结点_牛客题霸_牛客网 (nowcoder.com)思路:①定义傀儡节点newhead,指针pre指向newhead②遍历链表,如果当前节点 cur 的值和cur.next的值,如果相等 cur=cur.next 继续判断,直到不相等,此时用pre.next 保存cur 的下一个节点如果不相等,pre=pre.next.相当于是删除了中间的节点public ListNode deleteDuplication(ListNode pHead) { ..原创 2021-08-08 00:49:10 · 88 阅读 · 0 评论 -
链表—分割
链表分割_牛客题霸_牛客网 (nowcoder.com)思路:设置两个头,一个用来存放比目标值小的,另外一个用力啊存放比目标值大的,最后链接两个的目标值,记住最后一定要最后一个节点的next设为nullpublic ListNode partition(ListNode pHead, int x) { if(pHead==null)return null; ListNode small=new ListNode(-1); ListNod...原创 2021-08-08 00:07:10 · 100 阅读 · 0 评论 -
合并两个有序链表
21. 合并两个有序链表 - 力扣(LeetCode) (leetcode-cn.com)思路:①新建傀儡节点newHead,用于添加后续节点②遍历两个链表,比较第一个链表当前节点的值和第二个链表当前节点的值,较小的放在新链表末尾③遍历完成后,其中一个链表已经走完,将没走完的加到新链表的末尾public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode newHead=new ListNode(-原创 2021-08-07 23:44:50 · 82 阅读 · 0 评论 -
链表中倒数第K个节点
链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com)思路:还是快慢指针①既然是倒数第K个节点,那我就定义一个快指针,先让他跑k个节点,②定义一个慢指针,让他和已经跑了k个节点的快指针一起跑③快指针跑完了,慢指针就是倒数第K个节点 public ListNode FindKthToTail(ListNode head,int k) { ListNode slow=head; ListNode fast=head; ..原创 2021-08-07 23:27:39 · 57 阅读 · 0 评论 -
返回链表的中间节点
876. 链表的中间结点 - 力扣(LeetCode) (leetcode-cn.com)这道题可以直接用快慢指针做:①定义slow表示跑得慢的节点,一次只跑一个节点定义fase表示跑的快的节点,一次跑两个②同时起跑,只要fast到了终点,slow就是中间节点public ListNode middleNode(ListNode head) { if(head==null){ return null; } .原创 2021-08-07 23:09:47 · 140 阅读 · 0 评论 -
反转链表-leetCode 206
题目来源:206. 反转链表 - 力扣(LeetCode) (leetcode-cn.com)直接上思路:①新建一个傀儡节点newhead,newhead.next=head 就是链表的头节点;②遍历链表假如当前节点为cur新建节点 tmp=cur.next;将当前节点插入傀儡节点和链表之间,要注意这里的顺序cur.next=newhead.next;newhead.next=cur;cur=tmp;完整代码:public ListNode r...原创 2021-08-07 22:57:08 · 81 阅读 · 0 评论 -
顺时针打印数组
对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。首先坑定是使用模拟法,直接模拟,但是自己Debug了好几遍都是越界,越整越迷糊,整的脑袋瓜子嗡嗡的,于是,我突然有了个大胆的想法只要我拿到了全部的数字,直接跳出循环就好了,还管什么越界,不存在啊ok,上代码:public static int[]draw1(int[][]arr,int n ,int m ){..原创 2021-08-07 17:43:08 · 316 阅读 · 0 评论