LeetCode日记
LeetCode打卡天地,无论copy还是自己写,
记录成长为基础!
Wakasa Rumi
You can't judge a book by its cover.
展开
-
LeetCode艰难刷题日记:矩阵置零
class Solution { public void setZeroes(int[][] matrix) { int m = matrix.length, n = matrix[0].length; boolean[] row = new boolean[m]; //存放元素为0的行下标 boolean[] col = new boolean[n]; //存放元素为0的列下标 //记录原数组中,元素为0的行下标与列下标 ...原创 2021-11-08 11:41:22 · 117 阅读 · 0 评论 -
LeetCode艰难刷题日记 18. 杨辉三角
题目给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。体会自己对动态规划真的不熟悉,所以看了看b站还有题解开始慢慢理解并加深。对我而已,动态规划就是通过列出各个状态下的条件,比如这题中第一行是1,第二行1,1,转换为class Solution { public List<List<Integer>> generate(int numRows) { List<List<In原创 2021-11-07 14:42:09 · 83 阅读 · 0 评论 -
LeetCode艰难刷题日记之 350. 两个数组的交集 II
题目两个数组的交集 II思路-1. 两个数组a和b,把数组a的元素 放入一个HashMap中,key为a元素,value为元素出现的次数-2 .然后在遍历数组b,检验数组b的元素是否在1中的map存在,有则是a和b元素的交集元素代码class Solution { public int[] intersect(int[] nums1, int[] nums2) { if (nums1.length > nums2.length) {原创 2021-11-05 09:20:39 · 88 阅读 · 0 评论 -
剑指 Offer 52. 两个链表的第一个公共节点
Q:输入两个链表,找出它们的第一个公共节点。定义两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点 同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点; 当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。 当它们相遇时,所指向的结点就是第一个公共结点/** * Definition for singly-linked list. * public class ...原创 2021-03-26 15:50:46 · 60 阅读 · 0 评论 -
面试题 02.03. 删除中间节点
面试题 02.03. 删除中间节点实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。示例:输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a->b->d->e->f/** * Definition for singly-linked list. * public class ListNode { * int val; * .原创 2021-03-26 15:09:56 · 58 阅读 · 0 评论 -
1331. 数组序号转换
给你一个整数数组arr ,请你将数组中的每个元素替换为它们排序后的序号。序号代表了一个元素有多大。序号编号的规则如下:序号从 1 开始编号。一个元素越大,那么序号越大。如果两个元素相等,那么它们的序号相同。每个数字的序号都应该尽可能地小。示例 1:输入:arr = [40,10,20,30]输出:[4,1,2,3]解释:40 是最大的元素。 10 是最小的元素。 20 是第二小的数字。 30 是第三小的数字。示例 2:输入:arr = [100,100,100]输出:[..原创 2021-03-23 22:43:07 · 109 阅读 · 0 评论 -
面试题 17.10. 主要元素
数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。示例 1:输入:[1,2,5,9,5,9,5,5,5]输出:5示例 2:输入:[3,2]输出:-1示例 3:输入:[2,2,1,1,1,2,2]输出:2说明:你有办法在时间复杂度为 O(N),空间复杂度为 O(1) 内完成吗?代码:class Solution { public int majorityElement(int[] nums) { .原创 2021-03-23 22:20:27 · 87 阅读 · 0 评论 -
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
public int kthToLast(ListNode head, int k) { Stack<ListNode> stack = new Stack<>(); //链表节点压栈 while (head != null) { stack.push(head); head = head.next; } //在出栈串成新的链表 List..原创 2021-03-08 10:28:12 · 304 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
题目写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。思路递归中有很多重复计算。利用动态规划,设定边界条件,通过转移方程进行递推。本题...原创 2020-09-28 16:44:06 · 77 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序
题目输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:...原创 2020-09-24 16:20:04 · 91 阅读 · 0 评论 -
剑指 Offer 31. 栈的压入、弹出序列
题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), p原创 2020-09-23 17:06:41 · 64 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","deleteHead","appendTa.原创 2020-09-20 16:58:45 · 71 阅读 · 0 评论 -
剑指 Offer 18. 删除链表的节点
题目给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为1的第三个节点,那么在调用了你的函数之后,该链表...原创 2020-09-19 11:01:03 · 68 阅读 · 0 评论 -
剑指 Offer 52. 两个链表的第一个公共节点
如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相.原创 2020-09-19 10:11:21 · 57 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
题目输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制0 <= 链表长度 <= 1000思路1.建立一个链表2,使用while循环遍历两个链表(循环条件while (l1 != null && l2 != null),每次遍历对比链表节点的值3.把较小的链表的插入新建的链表.原创 2020-09-18 08:48:21 · 73 阅读 · 0 评论 -
剑指Offer 22. 链表中倒数第k个节点
标题输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.思路就是把链表放入栈中链表第一个元素会压入栈底,那么按着这个节奏来走栈顶元素就是链表的最后一个元素从栈顶到栈底依次把元素放原创 2020-09-16 16:51:06 · 75 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000解法:把链表按顺序遍历,并边把链表每个节点存在栈中。再从栈中取出栈顶元素的每个元素的值,保存在数组中,输出数组就可以达到逆序输出链表效果/** * Definition for singly-linked list. * public class ListNode { *原创 2020-09-15 23:10:39 · 52 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制:2 <= n <= 100000分析:如果用暴力方法解题,就会可能超时,因为题目有限制n的范围,2 <= n <= 100000。所以改为HashSet做.原创 2020-09-14 23:18:03 · 114 阅读 · 0 评论 -
LeetCode160. 相交链表
160. 相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4.原创 2020-09-13 22:34:21 · 117 阅读 · 0 评论 -
LeetCode 234.回文联表 Java
题目请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路1.遍历遍历2.把链表每个节点数据存在ArrayList中3.使用双指针遍历ArrayList代码/** * Definition for singly-linked list. * public class ListNode..转载 2020-08-26 20:20:18 · 161 阅读 · 0 评论 -
LeetCode 155.最小栈 java
classMinStack{Stack<Integer>stack=newStack<Integer>();Stack<Integer>minStack=newStack<Integer>();publicvoidpush(intx){stack.push(x);if(minStack.isEmpty()){...原创 2020-08-26 20:27:43 · 96 阅读 · 0 评论 -
Leetcode 461. 汉明距离
题目两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。思路通过异或计算后,用Integer.bitCount方法判断结果的1个数即可代码classSolution{...原创 2020-08-21 21:27:51 · 144 阅读 · 0 评论 -
LeetCode 448. 找到所有数组中消失的数字
448. 找到所有数组中消失的数字难度简单433收藏分享切换为英文关注反馈给定一个范围在 1 ≤ a[i] ≤n(n= 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1,n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]思路:1.遍历数组,把num[i] ...原创 2020-08-20 12:35:54 · 119 阅读 · 0 评论 -
LeetCode70.爬楼梯
题目描述难度简单1191收藏分享切换为英文关注反馈假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入:2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入:3输出:3解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶超时解法...原创 2020-08-20 07:41:24 · 111 阅读 · 0 评论