200. 岛屿数量——number-of-islands给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
1234567输入:grid = [ ['1','1','1','1','0'], ['1','1','0','1','0'], ['1','1','0','0','0'], ['0','0','0','0','0']]输出:1
示例 2:
1234567输入:grid = ...
198. 打家劫舍——house-robber你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
示例 1:
1234输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。
示例 2:
1234输入:[2,7,9,3,1]输出:12解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。 偷窃到的最高金额 = 2 + 9 + 1 = 12 。
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 400
我的想法
第一时间就想到了动态规划:每个结点的初始状态就是本金
后序的就是从第三个地方开 ...
155. 最小栈——min-stack设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。
示例 1:
12345678910111213141516输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,null,-3,null,0,-2]解释:MinStack minStack = new MinStack();minStack.push(-2);min ...
152. 乘积最大子数组——maximum-product-subarray给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续 子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
测试用例的答案是一个 32-位 整数。
请注意,一个只包含一个元素的数组的乘积是这个元素的值。
示例 1:
123输入: nums = [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
123输入: nums = [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
提示:
1 <= nums.length <= 2 * 104
-10 <= nums[i] <= 10
nums 的任何子数组的乘积都 保证 是一个 32-位 整数
我的答案333ms|击败6.74%1234567891011121314class Solution { public int maxProduct(int[] nums) { int max = num ...
148. 排序链表——sort-list给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
示例 1:
12输入:head = [4,2,1,3]输出:[1,2,3,4]
示例 2:
12输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]
示例 3:
12输入:head = []输出:[]
提示:
链表中节点的数目在范围 [0, 5 * 104] 内
-105 <= Node.val <= 105
进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?
我的答案15ms|击败23.45%
这样写肯定是不够的,时间空间复杂度极高
123456789101112131415161718192021222324252627282930313233class Solution { public ListNode sortList(ListNode head) { List<Integer> list = new ArrayLis ...
146. LRU 缓存——lru-cache请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类:
LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存
int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。
函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。
示例:
1234567891011121314151617输入["LRUCache", "put", "put", "get", "put", "get", "put" ...
142. 环形链表 II——linked-list-cycle-ii给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
不允许修改 链表。
示例 1:
123输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
123输入:head = [1,2], pos = 0输出:返回索引为 0 的链表节点解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
123输入:head = [1], pos = -1输出:返回 null解释:链表中没有环。
提示:
链表中节点的数目范围在范围 [0, 104] 内
-105 <= Node. ...
2025-2026-1《数据结构》测验4选择1.数据结构是一门研究非数值计算的程序设计问题中计算机的()以及它们之间的关系和运算等的学科。
A.操作对象
B.计算方法
C.逻辑存储
D.数据映象
数据结构的核心定义是:研究非数值计算的程序设计问题中,计算机的操作对象(如数组、链表、树、图等),以及这些对象之间的逻辑关系、物理存储方式和相关运算(如插入、删除、排序等)
4.在仅设有尾指针的表长为n的单循环链表中,以下操作时间复杂度为O(n)的是()。
A.表头插入
B.表头删除
C.表尾插入
D.表尾删除
表尾删除要知道表尾指针的前一个,需要先遍历一遍
9.将森林转换为对应的二叉树,若在二叉树中,结点u是结点v的父结点的父结点,则在原来的森林中,u和v可能具有的关系是( )。 Ⅰ.父子关系 Ⅱ.兄弟关系 Ⅲ.u的父结点与v的父结点是兄弟关系
孩子的孩子
12345 u / _ /v
Ⅰ.父子关系:
12345u / _ \v
兄弟的孩子
12345u \ _ /v
Ⅱ.兄弟关系
12345u \ _ \ v
1 ...
139. 单词拆分——word-break给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。
注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。
示例 1:
123输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。
示例 2:
1234输入: s = "applepenapple", wordDict = ["apple", "pen"]输出: true解释: 返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接 ...
128. 最长连续序列——longest-consecutive-sequence给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例 1:
123输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:
12输入:nums = [0,3,7,2,5,8,4,6,0,1]输出:9
示例 3:
12输入:nums = [1,0,1,2]输出:3
提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
我的想法
先排序,然后再从头开始找,这个一看就时间复杂度很高
我的超时答案123456789101112131415161718192021class Solution { public int longestConsecutive(int[] nums) { Array ...


