
数据结构和算法
文章平均质量分 85
数据结构和算法&LeetCode常见算法解法分析
xianghan收藏册
从专注于Java方向的高级架构师,转变为AI大模型技术专家。目前从事智能驾驶领域。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
图解数组和链表详细对比,性能测试
本文我们介绍了数组的概念以及它的优缺点,同时还介绍了单向链表、双向链表及循环链表的概念以及链表的优缺点。我们在最后的评测中可以看出,当我们正常从头部依次添加元素时,链表和数组的性能差不不大。但当数据初始化完成之后,我们再进行插入操作时,尤其是从头部插入时,因为数组要移动之后的所有元素,因此性能要比链表低很多;但在查询时性能刚好相反,因为链表要遍历查询,并且LinkedList在查询比较多的场景中,我们要尽量使用数组,而在添加和删除操作比较多时,我们应该使用链表结构。httpshttpshttps。...原创 2022-07-21 22:14:29 · 607 阅读 · 0 评论 -
9-图文打造LeeCode算法宝典-动态或贪心题解
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:示例 2:思路:数组中找到一组可以获得利润的值,然后不断更新他的最大值和最小值,两者最后之差就是他的结果。买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。**注意:*原创 2022-06-27 22:44:29 · 103 阅读 · 0 评论 -
8-图文打造LeeCode算法宝典-最小栈与LRU缓存机制算法题解
设计一个支持 , , 操作,并能在常数时间内检索到最小元素的栈。示例:提示:使用一个辅助栈stackMin来保存栈中的最小元素。stackMin始终记录着stackData中的最小值,所以stackMin的栈顶元素始终是当前stackData中的最小值。LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 和 写入数据 。获取数据 - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数原创 2022-06-24 06:00:00 · 127 阅读 · 0 评论 -
7-图文打造LeeCode算法宝典-链表和树算法题解
反转一个单链表。示例:进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?递归的终止条件:(1)head为null,直接返回head。(2)head.next为null,直接返回head。递归的过程:我们新的头节点记为newHead,其值应该是翻转以head.next为头节点的链表的结果。同时把head放在head.next的后面,并令head.next为null,这样我们就把head元素放在了新链表的末尾。由于涉及到递归,而每一次递归的时间复杂度都是O(1)级别的,因此时间复杂度和空间复杂度原创 2022-06-24 06:00:00 · 134 阅读 · 0 评论 -
6-图文打造LeeCode算法宝典-数组与排序算法题解
给你一个包含 n 个整数的数组 ,判断 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。**注意:**答案中不可以包含重复的三元组。示例:思路双指针法首先对数组进行排序,排序后固定一个数nums[i]nums[i],再使用左右指针指向nums[i]后面的两端,数字分别为nums[L]nums[L]和nums[R],计算三个数的和sum判断是否满足为 0,满足则添加进结果集如果nums[i]大于 0,则三数之和必然无法等于 0,结束循环如果原创 2022-06-24 06:00:00 · 131 阅读 · 0 评论 -
5-图文打造LeeCode算法宝典-字符串算法题解
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:示例 2:示例 3:分析首先我们看看这个题的示例3,该示例中提示我们这个题需要求的字符串的子串而不是子序列,我们具体来看看什么是子串,什么是子序列。区分子串和子序列后,我们再回过头来看看这个题。我们先动手画一画示例1的解题过程,如下图所示:示例1分析过程.png从上图我们可以观察出,可以使用双指针(指针和指针)来维护一个滑动窗口,这个窗口内的字符都是没有重复的,遍历一趟字符串后就可以得到最大的子串,因此时间复杂度为。现在想一个原创 2022-06-23 23:25:41 · 150 阅读 · 0 评论 -
4-图文打造LeeCode算法宝典-十大排序算法
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经原创 2022-06-23 23:16:19 · 124 阅读 · 0 评论 -
3-图文打造LeeCode算法宝典-数据结构和算法
哈希表存储的是由键(key)和值(value)组成的数据。把键当成数据的标识符,把值当成数据的内容。在存储数据的过程中,如果发生冲突,可以利用链表在已有数据的后面插入新数据来解决冲突。这种方法被称为“链地址法”。我们将每个人的性别作为数据进行存储,键为人名,值为对应的性别。结构如下:把Joe存进去使用哈希函数(Hash)计算Joe的键,也就是字符串“Joe”的哈希值。得到的结果为4928。将得到的哈希值除以数组的长度5,求得其余数。这样的求余运算叫作“mod运算”。此处mod运算的结果为3。我们将Joe的原创 2022-06-22 08:00:00 · 180 阅读 · 0 评论 -
2-图文打造LeeCode算法宝典-数据结构和算法
数组也是数据呈线性排列的一种数据结构Blue、Yellow、Red作为数据存储在数组中。数据按顺序存储在内存的连续空间内由于数据是存储在连续空间内的,所以每个数据的内存地址(在内存上的位置)都可以通过数组下标算出,我们也就可以借此直接访问目标数据(这叫作“随机访问”)。将Green添加到第2个位置上。首先,在数组的末尾确保需要增加的存储空间为了给新数据腾出位置,要把已有数据一个个移开。首先把Red往后移。然后把Yellow往后移。最后在空出来的位置上写入Green。删掉目标数据(在这里指Green)。然后把原创 2022-06-22 08:00:00 · 137 阅读 · 0 评论 -
1-图文打造LeeCode算法宝典-数据结构和算法
算法就是计算或者解决问题的步骤。算法(Algorithm)是指在有限的时间范围内,为解决某一问题而采取的方法和步骤的准确完整的描述,它是一个有穷的规则序列,这些规则决定了解决某一特定问题的一系列运算。一个算法应该具备以下特征。正确性(Correctness)算法的执行结果应当满足预先规定的功能和性能的要求,这是评价一个算法的最重要,也是最基本的标准。算法的正确性还包括对于输入、输出处理的明确而无歧义的描述。可读性(Readability)算法主要是为了人阅读和交流,其次才是机器的执行。所以,一个算法应当思路原创 2022-06-21 23:01:00 · 245 阅读 · 0 评论