发布于: 2024-8-2最后更新: 2024-9-12字数 00 分钟

type
status
date
slug
summary
tags
category
icon
password

25. K 个一组翻转链表 - 力扣(LeetCode)

哑节点,当前节点,前一个和后一个
翻转过程中,precur指针用于遍历和修改链表,而tail指针用于标记翻转组的结束位置。通过这种方式,算法可以逐个节点地重新链接链表,从而实现翻转的效果。

42. 接雨水 - 力扣(LeetCode)

height[left] < height[right] 时,我们选择计算左侧的原因是基于以下几点:
  1. 局部最大值:在双指针移动的过程中,我们首先处理左侧的柱子,因为左侧的柱子高度较低。在这种情况下,左侧柱子的积水量取决于左侧的最大柱子高度(leftMax),因为水只能从更高的柱子流向更低的柱子。
  1. 积水计算:如果左侧柱子的高度小于 leftMax,那么它将能够接住 leftMax - height[left] 单位的雨水。这是因为如果有一个比当前柱子高的柱子在其左侧,那么雨水就会在两者之间形成积水。
  1. 指针移动:由于左侧柱子的高度较低,我们可以安全地移动 left 指针向前,因为左侧的柱子不会影响右侧柱子的积水量计算。
  1. 避免重复计算:如果 height[left] >= leftMax,我们更新 leftMax,因为当前柱子或之后的柱子可能会形成更大的积水区域。如果 height[left] 小于 leftMax,则说明当前柱子可以积水,并且我们计算并累加这个积水量。
  1. 对称性:对于右侧柱子,逻辑是对称的。当 height[right] 小于 rightMax 时,我们可以计算右侧柱子的积水量。但是,由于我们从较低的一侧开始,这保证了我们总是从积水量可能最大的一侧开始计算。
  1. 效率:这种方法允许我们只遍历一次数组,同时计算所有柱子的积水量,避免了重复遍历和不必要的计算。
 

61. 旋转链表

已解答
中等
相关标签
相关企业
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
示例 1:
notion image
示例 2:
notion image
提示:
  • 链表中节点的数目在范围 [0, 500] 内
  • 100 <= Node.val <= 100
  • 0 <= k <= 2 * 109

链表中环的入口结点_牛客题霸_牛客网 (nowcoder.com)

描述

给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。
数据范围: n≤10000n≤10000,1<=结点值<=100001<=结点值<=10000
要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:
notion image
可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。

输入描述:

输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台会根据第二段是否为空将这两段组装成一个无环或者有环单链表

返回值描述:

返回链表的环的入口结点即可,我们后台程序会打印这个结点对应的结点值;若没有,则返回对应编程语言的空结点即可。

示例1

输入: {1,2},{3,4,5}复制
返回值: 3复制
说明: 返回环形链表入口结点,我们后台程序会打印该环形链表入口结点对应的结点值,即3

示例2

输入: {1},{}复制
返回值: "null"复制
说明: 没有环,返回对应编程语言的空结点,后台程序会打印"null"

示例3

输入: {},{2} 复制
返回值: 2复制
说明: 环的部分只有一个结点,所以返回该环形链表入口结点,后台程序打印该结点对应的结点值,即2
notion image

顺时针旋转矩阵_牛客题霸_牛客网 (nowcoder.com)

描述

有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵。
数据范围:0<n<3000<n<300,矩阵中的值满足 0≤val≤10000≤val≤1000
要求:空间复杂度 O(N2)O(N2),时间复杂度 O(N2)O(N2)
进阶:空间复杂度 O(1)O(1),时间复杂度 O(N2)O(N2)

示例1

输入: [[1,2,3],[4,5,6],[7,8,9]],3复制
返回值: [[7,4,1],[8,5,2],[9,6,3]]

链表内指定区间反转_牛客题霸_牛客网 (nowcoder.com)

描述

将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。例如:给出的链表为 1→2→3→4→5→NULL1→2→3→4→5→NULL, m=2,n=4m=2,n=4,返回 1→4→3→2→5→NULL1→4→3→2→5→NULL.
数据范围: 链表长度 0<size≤10000<size≤1000,0<m≤n≤size0<mnsize,链表中每个节点的值满足 ∣val∣≤1000∣val∣≤1000
要求:时间复杂度 O(n)O(n) ,空间复杂度 O(n)O(n)
进阶:时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)

示例1

输入: {1,2,3,4,5},2,4复制
返回值: {1,4,3,2,5}复制

示例2

输入: {5},1,1复制
返回值: {5}
注意前面指针不要动

删除有序链表中重复的元素-II_牛客题霸_牛客网 (nowcoder.com)

描述

给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。例如:给出的链表为1→2→3→3→4→4→51→2→3→3→4→4→5, 返回1→2→51→2→5.给出的链表为1→1→1→2→31→1→1→2→3, 返回2→32→3.
数据范围:链表长度 0≤n≤100000≤n≤10000,链表中的值满足 ∣val∣≤1000∣val∣≤1000
要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)
进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)

示例1

输入: {1,2,2}复制
返回值: {1}复制

示例2

输入: {}复制
返回值: {}

括号生成_牛客题霸_牛客网 (nowcoder.com)

描述

给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。
例如,给出n=3,解集为:
"((()))", "(()())", "(())()", "()()()", "()(())"
数据范围:0≤n≤100≤n≤10
要求:空间复杂度 O(n)O(n),时间复杂度 O(2n)O(2n)

示例1

输入: 1复制
返回值: ["()"] 复制

示例2

输入: 2复制
返回值: ["(())","()()"]

56. 合并区间

已解答
中等
相关标签
相关企业
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
示例 1:
示例 2:
提示:
  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

283. 移动零

已解答
简单
相关标签
相关企业
提示
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
示例 2:
提示:
  • 1 <= nums.length <= 104
  • 231 <= nums[i] <= 231 - 1
进阶:你能尽量减少完成的操作次数吗?

73. 矩阵置零

已解答
中等
相关标签
相关企业
提示
给定一个 m x n 的矩阵,如果一个元素为 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法
示例 1:
notion image
示例 2:
notion image
提示:
  • m == matrix.length
  • n == matrix[0].length
  • 1 <= m, n <= 200
  • 231 <= matrix[i][j] <= 231 - 1
进阶:
  • 一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。
  • 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
  • 你能想出一个仅使用常量空间的解决方案吗?
 

Loading...
刷题记录——哈希表

🗒️刷题记录——哈希表


算法笔记——排序

🗒️算法笔记——排序