
A1-数据结构和算法
数据结构和算法
乐之者v
快乐编程,一生编程。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode34:在排序数组中查找元素的第一个和最后一个位置
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。输入:nums = [5,7,7,8,8,10], target = 8。输入:nums = [5,7,7,8,8,10], target = 6。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。如果数组中不存在目标值 target,返回 [-1, -1]。输入:nums = [], target = 0。输出:[-1,-1]输出:[-1,-1]原创 2025-04-12 12:52:35 · 185 阅读 · 0 评论 -
LeetCode 143. 重排链表
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。寻找链表中间节点并切割 + 反转链表第二个链表 + 合并链表。切割后第一个链表是 1,2,3 , 第二个链表是 4,5。每次各取一个节点,合并链表为 1,5,2,4,3。如: 1,2,3,4,5 的 中间节点 是3 ,输入:head = [1,2,3,4,5]输入:head = [1,2,3,4]输出:[1,5,2,4,3]反转第二个链表为 5,4 ,输出:[1,4,2,3]原创 2025-04-04 22:03:29 · 20 阅读 · 0 评论 -
LeetCode 415. 字符串相加
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。输入:num1 = “11”, num2 = “123”输入:num1 = “456”, num2 = “77”输入:num1 = “0”, num2 = “0”原创 2025-04-04 16:54:37 · 68 阅读 · 0 评论 -
LeetCode 54.螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。这样就能返回矩阵中所有元素。最后从下到上,遍历。原创 2025-03-01 11:50:05 · 196 阅读 · 0 评论 -
LeetCode 92.反转链表II
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表。输入:head = [1,2,3,4,5], left = 2, right = 4。输入:head = [5], left = 1, right = 1。输出:[1,4,3,2,5]原创 2025-02-20 18:06:39 · 119 阅读 · 0 评论 -
LeetCode 300.最长递增子序列
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的。解释:最长递增子序列是 [2,3,7,101],因此长度为 4。给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。输入:nums = [10,9,2,5,3,7,101,18]输入:nums = [0,1,0,3,2,3]原创 2025-02-19 23:58:21 · 218 阅读 · 0 评论 -
LeetCode 102.二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]输入:root = [1]原创 2025-02-11 23:02:16 · 103 阅读 · 0 评论 -
LeetCode42.接雨水
解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水。当前柱子左右两边最高柱子中较矮的,减去当前柱子的高度,就是能接的雨水。给定个非负整数表示每个宽度为1的柱子的高度图,计算。输入:height=[4,2,0,3,2,5]按此排列的柱子,下雨之后能接多少雨水。输入:height=原创 2025-02-09 11:01:49 · 119 阅读 · 0 评论 -
LeetCode 15.三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]注意,输出的顺序和三元组的顺序并不重要。解释:唯一可能的三元组和不为 0。输入:nums = [0,1,1]原创 2025-02-02 18:01:03 · 111 阅读 · 0 评论 -
leetCode 146. LRU缓存机制
/ 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}lRUCache.put(4, 4);// 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}lRUCache.put(2, 2);// 缓存是 {1=1, 2=2}// 返回 -1 (未找到)lRUCache.get(1);// 返回 -1 (未找到)lRUCache.put(1, 1);// 缓存是 {1=1}lRUCache.get(1);原创 2025-01-24 12:13:49 · 178 阅读 · 0 评论 -
LeetCode5 :最长回文子串
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。给你一个字符串 s,找到 s 中最长的回文子串。原创 2025-01-23 13:20:46 · 301 阅读 · 0 评论 -
LeetCode 53.最大子数组和
给你一个整数数组m5,请你找出一个具有最大和的连续子数组(子数组最少包含一个。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]解释:连续子数组 [4,-1,2,1] 的和最大,为 6。输入:nums = [5,4,-1,7,8]子数组是数组中的一个连续部分。输入:nums = [1]元素),返回其最大和。原创 2025-01-22 12:17:44 · 105 阅读 · 0 评论 -
数据结构的基础知识
。原创 2025-01-22 10:40:25 · 687 阅读 · 0 评论 -
LeetCode25.K个一组翻转链表
k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。输入:head=[1,2,3,4,5],k=2。输出:[2,1,4,3,5]原创 2025-01-17 14:38:39 · 129 阅读 · 0 评论 -
LeetCode 64. 最小路径和
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。原创 2025-01-04 12:01:25 · 263 阅读 · 0 评论 -
leetCode 33:搜索旋转排序数组
这道二分查找,非常高频,可以多练习下。原创 2025-01-04 10:58:47 · 192 阅读 · 0 评论 -
leetCode322.零钱兑换
计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。输入:coins=[1,2,5],amount=11。你可以认为每种硬币的数量是无限的。解释:11=5+5+1。原创 2024-12-25 00:01:05 · 245 阅读 · 0 评论 -
leetCode43.字符串相乘
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。注意:不能使用任何内置的BigInteger库或直接将输入转换为整数。输入:num1=“123”,num2=“456”输入:num1=“2”,num2=“3”输出:“56088”原创 2024-12-24 00:01:36 · 207 阅读 · 0 评论 -
LeetCode200.岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。原创 2024-12-14 14:41:49 · 298 阅读 · 0 评论 -
LeetCode118.杨辉三角
给定一个非负整数numRows,生成「杨辉三角」的前numRows行。输出:[[1],[1,1],[1,2,1],[1,3,3,1],在「杨辉三角」中,每个数是它左上方和右上方的数的和。当前的值,等于左上角加上正上方。输入:numRows=5。输入:numRows=1。原创 2024-12-08 13:24:41 · 273 阅读 · 0 评论 -
leetCode121.买卖股票的最佳时机
给定一个数组pr1ces,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。注意利润不能是7-1=6,因为卖出价格需要大于买入价格:同时,你不能在买入前卖H股票。返回你可以从这笔交易中获取的最大利润。解释:在第2天(股票价格=1)的时候买入,在第5天。(股票价格=6)的时候卖出,最大利润=6-1=5。输入:[7,1,5,3,6,4]在最小价格时买入,最大利润时卖出。来计算你所能获取的最大利润。原创 2024-12-07 13:07:57 · 305 阅读 · 0 评论 -
LeetCode169.多数元素
给定一个大小为n的数组nums,返回其中的多数元素。多数元素是指在数组中出现次数大。你可以假设数组是非空的,并且给定的数组总是存在多数元素。排序后,在 n/2 位置的元素,必定是 多数元素。输入:nums=[2,2,1,1,1,2,2]输入:nums=[3,2,3]于 [ n/2] 的元素。原创 2024-12-05 23:41:15 · 174 阅读 · 0 评论 -
LeetCode136.只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。输入:nums = [4,1,2,1,2]最后 0 跟只出现一次的数异或结果为 a.所有出现两次的数据异或后结果为 0,输入:nums = [2,2,1]原创 2024-12-04 23:22:35 · 245 阅读 · 0 评论 -
leetCode 283.移动零
由于数组有0,快指针先走一步,此时慢指针对应的就是0,所以要交换。交换后0就都在右边了。如果数组没有0,那么快慢指针始终指向同一个位置,每个位置自己和自己交换;原创 2024-11-24 22:30:58 · 212 阅读 · 0 评论 -
LeetCode232.用栈实现队列
请你仅使用两个栈实现先入先出队列。另一个栈当作出列的栈,用于 pop 和 peek 操作。将一个栈当作入列的栈,用于压入 push 传入的数据;原创 2024-11-20 23:56:20 · 246 阅读 · 0 评论 -
leetCode 739.每日温度
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。输入: temperatures = [73,74,75,71,69,72,76,73]遍历数组,将下标放进 单调栈,如果比过去几天的温度高,就是结果需要的下标。输入: temperatures = [30,40,50,60]输出: [1,1,4,2,1,1,0,0]输出: [1,1,1,0]原创 2024-11-10 12:53:57 · 246 阅读 · 0 评论 -
leetCode155:最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。原创 2024-11-10 11:35:02 · 214 阅读 · 0 评论 -
LeetCode22.括号生成
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。如果左括号数量小于 生成括号的对数 ,可以放一个左括号。如果右括号数量小于左括号的数量, 可以放一个右括号。原创 2024-11-03 16:28:54 · 282 阅读 · 0 评论 -
LeetCode39:组合总和
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。原创 2024-10-07 10:32:41 · 397 阅读 · 0 评论 -
LeetCode78 子集
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]给你一个整数数组 nums ,数组中的元素 互不相同。返回该数组所有可能的。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。输入:nums = [1,2,3]输入:nums = [0]输出:[[],[0]]原创 2024-10-04 13:56:57 · 392 阅读 · 0 评论 -
leetCode2:两数相加(链表)
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。请你将两个数相加,并以相同形式返回一个表示和的链表。原创 2024-09-15 12:43:24 · 195 阅读 · 0 评论 -
leetCode46:全排列
【代码】leetCode46:全排列。原创 2024-09-06 00:02:11 · 189 阅读 · 0 评论 -
leetcode 1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。原创 2024-08-25 11:47:41 · 189 阅读 · 0 评论 -
leetcode 20. 有效的括号
有左括号就入栈,遍历到对应的右括号就将其左括号出栈。匹配到对称的括号,就出栈。如果是有效括号,最后栈为空。原创 2024-08-22 23:49:34 · 136 阅读 · 0 评论 -
leetcode 141. 环形链表
如果链表中存在环 ,则返回 true。否则,返回 false。给你一个链表的头节点 head ,判断链表中是否有环。原创 2024-08-21 23:56:56 · 246 阅读 · 0 评论 -
leetcode 21.合并两个有序链表
leetcode 21.合并两个有序链表。原创 2024-08-17 12:36:01 · 111 阅读 · 0 评论 -
leetcode3.无重复字符的最长子串
给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。原创 2024-08-10 11:46:18 · 169 阅读 · 0 评论 -
LeetCode回溯算法的解题思路
回溯法:一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试。输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]输入:nums = [0]输出:[[],[0]]原创 2024-02-07 23:58:54 · 682 阅读 · 0 评论 -
LeetCode 二叉树/n叉树的解题思路
(3)在遍历过程中,使用 Queue的 offer()方法得到队列中的节点,根据节点查出它的左节点和右节点,并用offer()方法放入队列中。(1)获取 Queue的size, 因为Queue中存放的其实就是每一层中所有的节点, size就相当于每一层的数量,也就是宽度。1、使用 Queue的 offer()方法(或者是add()方法)把树的根节点放入 Queue;(2)找出与此点邻接的且尚未遍历的点(也就是子节点),进行标记,然后全部放入stack中;前序遍历:根节点,左节点,右节点。原创 2024-02-07 23:58:08 · 1016 阅读 · 0 评论 -
LeetCode 链表常见操作及解题思路
可以将链表的节点,作为HashMap的key,再用HashMap的containsKey()来判断当前节点是否已经存在。(3)可以通过栈实现,将链表数据放入栈里面,再拿出来。思路:处理环形链表时,也可以使用快慢指针,一个走得快,一个走得慢,如果是环形链表,那么这两个指针最终会相遇。将当前节点node的指针next指向下一个节点的下一个节点,就相当于删除下个节点了。8.A指针走完了一个链表,就指向另一个链表,B指针也是。涉及到下标的问题,都可以将链表转化为数组解决,数组的每一个元素都是一个节点。原创 2024-02-07 23:57:21 · 464 阅读 · 0 评论