Structure Algorithm LeetCode
文章平均质量分 56
结合LeetCode相关题目,分析常见的数据结构和算法
空与一
这个作者很懒,什么都没留下…
展开
-
LeetCode链表:多指针和虚拟头结点
链表操作的时间复杂度操作时间复杂度查找元素O(n)插入元素O(1)删除元素O(1)链表的解题技巧多指针2个,快慢指针3个,链表反转4个,结点交换虚拟头结点常用于删除结点的情况其他情况也可具体分析LeetCode 206 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]C++class Solution {pub原创 2021-12-23 11:15:39 · 1661 阅读 · 0 评论 -
LeetCode数组:滑动窗口
上文介绍了数组的双下标对撞。本文介绍双下标的滑动窗口:左右2个下标组成一个窗口,初始化窗口大小可以为0根据条件,不断地扩大或者缩小窗口右下标增加,扩大窗口左下标增加,缩小窗口不断地计算窗口是否符要求,比较目前最优解和本次最优解,找出最终的最优解LeetCode 209 来源:力扣(LeetCode)209 Medium 链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum 给定一个含有 n 个正整数的数组原创 2021-12-10 11:58:29 · 1519 阅读 · 0 评论 -
LeetCode数组:双下标对撞
上文中,讲解了多下标的基本使用,每个下标都是从左到右移动。双下标的另一个操作是对撞:两个下标初始化在头部(最左边)和尾部(最右边),然后不断地向对方移动靠近。LeetCode 167 来源:力扣(LeetCode)Easy 链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted 给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。 函数原创 2021-12-06 11:38:23 · 2112 阅读 · 0 评论 -
LeetCode数组的解题技巧
上文介绍了数组的基本操作以及其时间复杂度。本文结合LeetCode题目,介绍数组的解题技巧。多下标使用一个下标遍历数组。也可以使用2个或者多个下标,每个下标代表不同的含义。区间2个下标可以组成区间,区间可以代表明确的含义:比如相同的元素区间。元素交换在数组中交换两个不同下标的值,其时间复杂度是O(1)。可以代替数组的删除或者插入操作,它们的时间复杂度是O(n)。LeetCode 283 来源:力扣(LeetCode)283 Easy 链接:https://leetcode-cn.co原创 2021-11-29 11:44:46 · 183 阅读 · 0 评论 -
数组的基本操作
数组是线性数据结构。由一块连续的内存空间组成用于储存相同类型的数据元素数组分成2种类型:固定数组:初始化的时候,分配一块内存空间,之后不会重新分配内存空间长度的含义是指数组容纳最多元素的数量,并且必须包含这么多的元素动态数组:初始化的时候,分配一块内存空间,之后可能重新分配空间长度的含义是指当前包含元素的数量,元素数量可以小于数组最大容量,并且允许不断地新增元素如果元素数量超过现有的数组容量,会重新给数组分配内存空间,并拷贝已有元素。这称之为扩容。结合数组的结构,其原创 2021-11-18 19:54:50 · 605 阅读 · 0 评论 -
算法的复杂度
使用数据结构或者算法解决问题,如何判断这种解法的优劣?从2个维度去考察:时间复杂度:用来评估代码运行的时间趋势空间复杂度:用来评估代码运行的内存占用规模时间复杂度下面的代码是求数字1到n的和,那如何评估计算机执行这段代码的时间?int sum(int n) { int sum = 0; for (int i = 1; i <= n; i++) { sum += i; } return sum;}假定计算机执行每行原创 2021-11-13 22:36:45 · 348 阅读 · 0 评论