【2021-4】LeetCode每日一题复盘
四月终于得到全勤徽章了,第一枚徽章——
坚持就是胜利
Week 1: April 1st - April 7th
Palindrome Linked List
思路:
原地判断(时间复杂度为1)的解法:
1.将链表从中间二分为两个链表
2.翻转第二个链表
3.判断两个链表是否相同(可能存在第一个链表比第二个链表多一个元素,只比较长度相同的部分)
代码链接:
234.palindrome-linked-list.java
Ones and Zeroes
题目大意:
二进制字符串数组中,不超过m个0、n个1的最大字符串子集。
代码链接:
474.ones-and-zeroes.java
Longest Valid Parentheses
当前字符串 | 栈中下标 | 最大长度 |
---|---|---|
空 | -1 | 0 |
( | -1,0 | 0 |
() | -1 | 2 |
()) | 2 | 2 |
())( | 2,3 | 2 |
())() | 2 | 2 |
代码链接:
32.longest-valid-parentheses.java
Design Circular Queue
题目大意:
设计一个环形队列。环形队列的优点是更好利用数组的空间:对于传统的队列,一旦队列满了,即使出队了元素,也无法继续插入任何元素。环形队列很好地解决了这一问题。
代码链接:
622.design-circular-queue.java
Global and Local Inversions
代码链接:
775.global-and-local-inversions.java
Minimum Operations to Make Array Equal
数组长度 | 最小操作数 |
---|---|
1 | 0 |
2 | 1 |
3 | 2 |
4 | 4=1+3 |
5 | 2+4 |
6 | 9=1+3+5 |
…… | …… |
2k | k*k = (1+2+…k-1)*2+k |
2k-1 | k*(k-1)= (1+2+…k-1)*2 |
代码链接:
1551.minimum-operations-to-make-array-equal.java
Determine if String Halves Are Alike
题目大意:
字符串长度为偶数,对半二分,两部分是否相似,相似的定义是元音字母个数一样。
代码链接:
1704.determine-if-string-halves-are-alike.java
Week 2: April 8th - April 14th
Letter Combinations of a Phone Number
题目大意:
给出由数字2-9构成的字符串,每个数字代表一个字母,映射关系与电话键上一致,求数字字符串对应的所有字母组合。
思路:
用Map存储数字和字母的映射关系。DFS递归遍历数字字符串,递归返回条件是当前遍历的索引等于字符串长度。dfs中循环遍历数字映射的字母字符串,每次拼接一个字母。
代码链接:
17.letter-combinations-of-a-phone-number.java
Verifying an Alien Dictionary
题目大意:
校验词典中单词是否按照一定顺序排序。排序规则按照给定的order字符串中字母的先后顺序。order中包含词典中所有的字母。
思路:
排序规则,对于s1和s2
1.s1和s2相同,符合,判断结束
2.s1是s2的子串,符合,判断结束;反之不符合,判断结束
3.遍历s1和s2长度重合的部分,对每个字母依次判断顺序。
提示知识点:
排序
字符串 indexOf:判断一个字符串是否是另一个字符串的子串,得到字符在字符串中的位置
代码链接:
953.verifying-an-alien-dictionary.java
Longest Increasing Path in a Matrix
思路:
以数组中元素(i,j)为起点dfs往四个方向遍历,为了避免重复的遍历过程,再用dp数组作为缓存,表示以(i,j)为起点的最长路径长度,当再次遍历到(i,j)时直接返回缓存值。
代码链接:
329.longest-increasing-path-in-a-matrix.java
Deepest Leaves Sum
思路:
1.递归先求出树的深度
2.递归左右子树求最深叶子节点值总和
代码链接:
1302.deepest-leaves-sum.java
Beautiful Arrangement II
题目大意:
重新排列1-n,使得相邻元素差的绝对值恰好是k种不同的数。
代码链接:
667.beautiful-arrangement-ii.java
Flatten Nested List Iterator
代码链接:
341.flatten-nested-list-iterator.java
Partition List
题目大意:
对于一个链表和元素x,重新划分链表使得小于x的元素位于大于等于x元素的前面。
Week 3: April 15th - April 21st
Fibonacci Number
题目大意:
斐波拉契数列:
F(0) = 0, F(1) = 1
F(n) = F(n - 1) + F(n - 2), n > 1.
给出n,求F(n)
思路:
1、借助长度为n+1的数组f
2、借助两个变量x,y
x=0,y=1
循环n次,y = x+y ,最后y的值就是f(n)
代码链接:
509.fibonacci-number.java
Remove All Adjacent Duplicates in String II
思路:
使用一个栈存储字符,如果有k个相同的连续字符则删除它们。
为了方便,使用Pair存储字符和它出现的次数。
代码链接:
1209.remove-all-adjacent-duplicates-in-string-ii.java
Number of Submatrices That Sum to Target
代码链接:
1074.number-of-submatrices-that-sum-to-target.java
Remove Nth Node From End of List
代码链接:
19.remove-nth-node-from-end-of-list.java
Combination Sum IV
题目大意:
给出一个元素不重复的数组,求组合出目标值target的种数。每个数可以用无数次。
思路:
动态规划。首先对数组nums排序,
双重循环 ,动态规划方程:
cnt[i] += cnt[i-nums[j]] , i >= nums[j],
最后cnt[target]就是所求的种数。
代码链接:
377.combination-sum-iv.java
N-ary Tree Preorder Traversal
代码链接:
589.n-ary-tree-preorder-traversal.java
Triangle
题目大意:
给出一个三角矩阵,计算从顶部到底部的最短路径和。
思路:
自底向上遍历矩阵。
triangle[i][j] += min(triangle[i+1][j], triangle[i+1][j+1])
triangle[0][0]即为所求
Week 4: April 22nd - April 28th
Brick Wall
题目大意:
一面砖墙,划一条竖线通过最少的砖。通过砖与砖的缝隙不算通过砖。
Count Binary Substrings
题目大意:
统计由0和1组成的字符串中0和1个数相同的子串个数。位置不同的子串即使内容相同也看作不同的子串。
代码链接:
696.count-binary-substrings.java
Critical Connections in a Network
题目大意:
求网络中的关键连接。网络中的关键连接指的是如果去除这条连接,会导致一些节点之间无法连通。
代码链接:
1192.critical-connections-in-a-network.java
Rotate Image
思路:
顺时针90度旋转可拆分为2个操作:
1.正对角线两侧元素互换
2.每一行元素逆转
Furthest Building You Can Reach
题目大意:
当一个建筑物的高度小于下一个建筑物的高度时,可使用梯子或砖头。使用梯子直接到达,使用砖头个数必须为高度差。你有一些梯子和砖头,问你能到达的最远建筑物下标。
思路:
最大高度差的建筑优先选择梯子。
遍历建筑物,使用优先队列保存后一个建筑与前一个建筑的正高度差,如果队列元素个数大于梯子数,考虑用砖头。直到没有可用的梯子或砖头,结束遍历。
代码链接:
1642.furthest-building-you-can-reach.java
Power of Three
Unique Paths II
题目大意:
机器人从左上角走到右下角有多少种不同的路径。机器人只能向下或向右,路径中的障碍物不可穿过。
Week 5: April 29th - April 30th
Find First and Last Position of Element in Sorted Array
题目大意:
在一个递增数组中,找出一个数出现的第一个和最后一个位置。
代码链接:
34.find-first-and-last-position-of-element-in-sorted-array.java
Powerful Integers
题目大意:
给出x,y和bound三个数,求出所有不大于bound 的x^ i + y ^ j, i >= 0 且j >= 0。
思路:
两个嵌套的for循环。注意x和y为1的特殊情况,此时x和y的n次幂都是1,只需算一次,不要死循环。而且,当和sum已经大于bound时,后面的都不需判断了,跳出循环。
代码链接:
970.powerful-integers.java
【2021-4】LeetCode每日一题复盘相关推荐
- 【2021.3】 LeetCode每日一题复盘
March 1st - March 7th Average of Levels in Binary Tree 题目大意: 有一棵二叉树,返回二叉树每一层节点值的平均值的列表. 思路: 很自然的想到了二 ...
- LeetCode每日一题之排列硬币
前言: 大家好,今天是LeetCode每日一题的第十天,,给大家分享的是排列硬币,难度系数两颗星!废话不多说,先上题目! 1.1 题目要求 题目类型:排列硬币 题目内容: 总共有n枚硬币,将它们摆成一 ...
- leetcode每日刷题计划-简单篇day8
leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...
- Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)
思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...
- 【LeetCode每日一题】1723. 完成所有工作的最短时间
[LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...
- leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用
leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...
- LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色
LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...
- 【LeetCode每日一题】——109.有序链表转换二叉搜索树
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...
- leetcode每日一题·救生艇问题(Python)
leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...
最新文章
- Python 代理爬取网站数据
- C++一学就废?试试这个项目包
- C++离航篇——内存的申请释放
- Docker监控方案之cAdvisor
- (47)System Verilog 类中变量随机激励inside运算符
- 依赖dll_DLL攻击漫谈
- opencv 像素操作
- windows performance
- [LinuxVim]基础01
- qt串口通信_Qt编写气体安全管理系统29-跨平台
- c语言字体透明背景,背景透明文字不透明的最佳方法兼容IE(以背景黑色透明度0.5为例)...
- 气象数据之积温数据的获取与处理
- 硕士毕业论文框架怎么搭建?
- 2238. Number of Times a Driver Was a Passenger
- 基于单片机的篮球计数器设计
- php命名空间namespace自动载入
- 信息安全 数据赛 铁人三项_[信息安全铁人三项赛总决赛](数据赛)第二题
- 超级计算机欧冠军尤文,超级计算机预测欧冠结局:尤文决赛2-1巴萨 C罗赢梅西捧第6冠...
- ts 打开sourcemap_使用ts-node和vsc来调试TypeScript代码
- 文化课2021-2022游记