
代码随想录算法第14期
文章平均质量分 69
ao-it
ovo
展开
-
【数组篇-58.区间和 | 44.开发商购买土地(待做)】
第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间下标:a,b (b > = a),直至文件结束。输出每个指定区间内元素的总和。原创 2024-07-31 15:05:24 · 63 阅读 · 0 评论 -
【leetcode59.螺旋矩阵2 | leetcode54.螺旋矩阵 | LCR146.螺旋遍历二维数组】
螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元素。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输入:array = [[1,2,3],[8,9,4],[7,6,5]]输出:[[1,2,3],[8,9,4],[7,6,5]]输出:[1,2,3,6,9,8,7,4,5]输出:[1,2,3,4,5,6,7,8,9]给定一个二维数组 array,请。原创 2024-07-30 15:23:09 · 532 阅读 · 0 评论 -
【滑动窗口专题-leetcode209.长度最小的子数组 | 904.水果成篮 | 76.最小覆盖子串(待做?)】
农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中fruits[i] 是第 i 棵树上的水果种类。只有两个篮子,并且每个篮子只能装单一类型的水果。每个篮子能够装的水果总量没有限制。<2>:你可以选择任意一棵树开始采摘,你必须从每棵树(包括开始采摘的树)上恰好摘一个水果。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘,一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。原创 2024-07-29 15:18:29 · 813 阅读 · 0 评论 -
【双指针专题-leetcode26.删除有序数组中的重复项 | leetcode283.移动零 | leetcode977.有序数组的平方】
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。输入:nums = [0,0,1,1,1,2,2,3,3,4]解释:平方后,数组变为 [16,1,0,9,100]输出:5, nums = [0,1,2,3,4]输入:nums = [-4,-1,0,3,10]输入:nums = [-7,-3,2,3,11]输入: nums = [0,1,0,3,12]排序后,数组变为 [0,1,9,16,100]输出:[0,1,9,16,100]原创 2024-07-26 15:09:23 · 263 阅读 · 0 评论 -
【二分查找-leetcode69.x的平方根 | 367.有效的完全平方数】
注意:如果 mid * mid 的结果超出了 int 类型的范围(即大于 Integer.MAX_VALUE),就会发生溢出,结果会变成负数或其他不正确的值,所以加个long。注意二分的运用,平方根是目标值,那肯定要划出一个范围,大于等于0,则0为下界,找x的平方根,那x就为上界,符合二分要求。解释:返回 false ,因为 3.742 * 3.742 = 14 但 3.742 不是一个整数。, 由于返回类型是整数,小数部分将被舍去。解释:返回 true ,因为 4 * 4 = 16 且 4 是一个整数。原创 2024-07-24 09:17:03 · 264 阅读 · 0 评论 -
【二分查找-leetcode34.在排序数组中查找元素的第一个和最后一个位置】
题目:给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。输入:nums = [5,7,7,8,8,10], target = 8。输入:nums = [5,7,7,8,8,10], target = 6。先用二分找出目标值,在划分左右边界(滑动来慢慢确定位置(索引))如果数组中不存在目标值 target,返回 [-1, -1]。输入:nums = [], target = 0。输出:[-1,-1]输出:[-1,-1]原创 2024-07-23 23:25:49 · 240 阅读 · 1 评论 -
【二分查找-leetcode35.搜索插入位置】
搜索插入位置(二分查找的应用)原创 2024-07-23 16:29:13 · 379 阅读 · 0 评论 -
【 LeetCode104.二叉树的最大深度 | 111.二叉树的最小深度 | 222.完全二叉树的节点个数】
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。题目:给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。输入:root = [3,9,20,null,null,15,7]给定二叉树 [3,9,20,null,null,15,7],二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。输入:root = [1,2,3,4,5,6]原创 2023-06-24 01:37:19 · 117 阅读 · 1 评论 -
【 理论基础 | 递归遍历 | 迭代遍历】
完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。来实现,这也是队列先进先出的特点所决定的,因为需要先进先出的结构,才能一层一层的来遍历二叉树。前面介绍的树,都没有数值的,而二叉搜索树是有数值的了,二叉搜索树是一个有序树。原创 2023-06-15 00:57:12 · 173 阅读 · 0 评论 -
【LeetCode24.两两交换链表中的节点 | LeetCode19.删除链表倒数第N个节点 | LeetCode142.环形链表2】
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3。题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2。输出:[2,1,4,3]原创 2023-06-06 23:31:08 · 96 阅读 · 0 评论 -
【 栈与队列理论基础 | LeetCode232.用栈实现队列 | LeetCode225.用队列实现栈】
了解到用一个队列去模拟栈的进出元素,可以理解,大体思路是,倘若目标元素栈中为3,在栈中则是取到目标元素为止,如果第一个元素取到1,则原路放回,其余非目标元素同理,取了放回。:你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。题目:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。出栈:栈的删除操作就叫出栈,出数据在栈顶。原创 2023-06-05 23:05:35 · 134 阅读 · 1 评论 -
【 LeetCode344.反转字符串 | LeetCode541.反转字符串2 | 剑指offer05.替换空格 | LeetCode151.翻转字符串里的单词】
总结:解题不要仅仅限于只把题写出来就好,在具体开发中或者面试中,还要考虑时间复杂度,库函数虽然好用,但时间复杂度也会随之变高,不利,所以巧用方法,体会编程思想,关键部分如果可以用库函数解决,就勿用库函数。(记得在遍历字符串的过程中,只要让 i += (2 * k), i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间)因为要找的也就是每2 * k 区间的起点,这样写,程序会高效很多。输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]原创 2023-05-25 01:06:11 · 255 阅读 · 0 评论 -
【LeetCode454.四数相加 | LeetCode383.赎金信 | LeetCode15.三数之和 | LeetCode18.四数之和】
前面有道:三数之和为0(target),目标值为0,已确定,即nums[i]>0,就返回了(因为第一个元素都大于0了后面不可能相加还能等于0,因为是从小到大排序)。不能,因为target未知,可以是任意值,所以首元素与目标值可以这样判断:**nums[i]>target && (nums[i]>=0 || target >=0) **解释:nums[i]为正,target也为正,后面再加一个更不可能等于target了.题目·:给你一个由 n 个整数组成的数组 nums ,和一个目标值 target。原创 2023-05-22 00:39:55 · 228 阅读 · 1 评论 -
【哈希表理论基础 | LeetCode242.有效的字母异位词 | LeetCode349.两个数组的交集 | LeetCode202.快乐数 | Leet.. 】
例子:{2,7,3,6}。当指向第一个元素时,需7为9,所以去map里查询7是否含有,但遍历是第一个元素,map还没有存放遍历过的元素,所以map为空,接下来指向下一个元素时,map才会存遍历过的元素,2已经遍历过,所以2就放到map里面了,下一个元素是7需要2,所以去map里面看是否含有2,发现里面有存放2,最后找到两个对应的。如果数值无限制,可能上亿,哈希映射时,用数组就不合适了,因为数组下标放不了那么大的数,也浪费了存储空间。:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。原创 2023-05-20 23:52:09 · 164 阅读 · 0 评论 -
【 链表理论基础 | LeetCode203.移除链表元素 | LeetCode707.设计链表 | LeetCode206.反转链表】
val 是当前节点的值,next 是指向下一个节点的指针/引用。链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。题目:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。增加新节点,如下图所示:c节点的指针直接指向新节点F上,然后F节点的下一个指针指向D处,即完成在c和d处添加一个新节点f。原创 2023-05-19 00:50:32 · 158 阅读 · 3 评论 -
【LeetCode977.有序数组的平方 | LeetCode209.长度最小的子数组 | LeetCode59.螺旋矩阵】
5的平方可能是最大值,这里还需要重新定义一个新数组,将刚才得到的25放在最右边(具体看题目要求,是从小到大,还是从大到小排序)。这道题目迷惑了不少同学,纠结于数组中的元素为什么不能删除,主要是因为:数组在内存中是连续的地址空间,不能释放单一元素,如果要释放,就是全释放(程序运行结束,回收内存栈空间)。双指针法(快慢指针法)在数组和链表的操作中是非常常见的,很多考察数组和链表操作的面试题,都使用双指针法。首先是因为题目非递减顺序数组,最大的肯定在两边,好比该数组是【-5,1,2,3】4 的连续地址空间。原创 2023-05-18 02:35:11 · 206 阅读 · 2 评论 -
【代码随想录算法训练营第一天 | 数组理论基础 | LeetCode704.二分查找 | LeetCode27.移除元素】
数组理论基础 外加LeetCode例题 (含有解析以及代码)原创 2023-05-17 02:52:18 · 263 阅读 · 0 评论