•Array
LeetCode中Array类题目解析
爱吃骨头的猫、
嘘!
展开
-
LeetCode--84.柱状图中最大的矩形(暴力法,单调栈)
柱状图中最大的矩形(暴力法,单调栈)1. 题目描述2. 题目分析3. C语言实现3.1 暴力法3.2 单调栈4. Java实现1. 题目描述难度:困难2. 题目分析这道题有两种解法,一种是暴力遍历法,一种是利用栈来进行的单调栈的方法。- 暴力法暴力法师很容易想到的方法,从左到右依次遍历数组,依次计算每个元素所构成的最大矩形面积。时间复杂度为O(n^2)。- 单调栈这是一个非常典...原创 2020-03-25 18:45:52 · 3600 阅读 · 0 评论 -
LeetCode--53. 最大子序和(贪心)
最大子序和(C)1. 题目描述2. 题目分析3. C语言实现1. 题目描述难度:中等2. 题目分析这道题目的解法是贪心算法,遍历数组,比较最大子序和与当前元素的和大小,并更新最大子序值。3. C语言实现代码如下:int maxSubArray(int* nums, int numsSize){ int* dp = (int *)malloc(sizeof(int)*nums...原创 2020-03-08 15:26:38 · 3025 阅读 · 0 评论 -
LeetCode--35. 搜索插入位置(遍历,二分法)
搜索插入位置(C)1. 题目描述2. 题目分析3. C语言实现3.1 遍历法3.2 二分法1. 题目描述难度:简单2. 题目分析这道题目比较简单,比较容易想到的就是遍历法,其实更快的方法是二分法:遍历法依次遍历数组中的元素,判断是否存在目标值,如果存在返回索引,否则返回大于目标值的第一个元素的索引。时间复杂度为O(n)。二分法利用二分法来搜索数组会缩短访问时间。时间复杂度为O(...原创 2020-03-08 15:09:43 · 2977 阅读 · 0 评论 -
LeetCode--34.在排序数组中查找元素第一个和最后一个位置(二分法)
在排序数组中查找元素第一个和最后一个位置(C++)1. 题目描述2. 题目分析3. C++语言实现1. 题目描述难度:中等2. 题目分析看到题目我们需要知道以下几点:数组是有序的数组中存在重复的元素算法时间复杂度必须是O(logn)级别目标元素可能不存在与数组中根据题目要求,算法复杂度必须是O(logn)级别,那么二分法就是最佳的算法。根据本题,我们要寻找的是目标元素在数组...原创 2020-03-08 14:54:28 · 3016 阅读 · 0 评论 -
LeetCode--75.颜色分类(三路快排,计数排序)
颜色分类(C)1. 题目描述2. 题目解析3. C语言实现3.1 三路快排法3.2 计数排序法1. 题目描述难度:中等2. 题目解析这道题需要注意一下几点:原地进行排序,不可以另外申请数组空间。数组元素最多只有三个元素0, 1, 2,但是要考虑空数组和单个元素的例子有两种方法:计数排序法遍历出0,1,2元素的个数,然后按照这个个数重新写入数组,时间复杂度为O(n).三路...原创 2020-03-08 00:05:18 · 3077 阅读 · 0 评论 -
LeetCode--88.合并两个有序数组(插入法,排序法)
合并两个有序数组(C, Python)1. 题目描述2. 题目分析3. C语言实现4. Python语言实现1. 题目描述难度:简单2. 题目分析这道题比较简单,实现方法有两种:插入法©依次将nums2中的数与nums1中的数按照大小放入nums1的末尾,这样的做法不用再次申请空间。时间复杂度为O(n)。排序法(Python)先将nums2的元素放入nums1的尾部,然后进行排...原创 2020-03-07 23:43:10 · 3174 阅读 · 0 评论 -
LeetCode--81. 搜索旋转排序数组Ⅱ(遍历法,二分法)
搜索旋转排序数组Ⅱ(C, Python)1. 题目描述2. 题目分析3. C语言实现3.1 遍历法3.2 二分法4. Python语言实现1. 题目描述难度:中等2. 题目分析这道题目是LeetCode–33. 搜索旋转排序数组的延伸题,有三点不一样:有重复的元素数组中的元素虽然是升序的,但是里面含有重复的元素,这相对于33题难度提升了输出的变量为布尔型变量只要求判断数组中是否...原创 2020-03-06 20:51:43 · 3019 阅读 · 0 评论 -
LeetCode--33. 搜索旋转排序数组(二分法)
搜索旋转排序数组(C)1. 题目描述2. 题目分析3. C语言实现1. 题目描述难度:中等2. 题目分析这道题我们需要关注的点有一下几个:数组整体是升序的,并且数组中不存在重复的元素数组在某一点进行了旋转返回值是相同元素的下标,没有则返回-1算法时间复杂度必须是O(logn)从上面几点分析,要想时间复杂度达到O(logn),要使用二分法进行搜索。但是怎么处理旋转之后的数组呢...原创 2020-03-06 15:59:21 · 3021 阅读 · 0 评论 -
LeetCode--45. 跳跃游戏Ⅱ(贪心)
跳跃游戏Ⅱ(C)1. 题目描述2. 题目分析3. C语言实现3.1 最大跨越点算法3.2 贪心算法1. 题目描述难度:困难2. 题目分析该题目是LeetCode55.跳跃算法的进阶版,有以下几点需要注意:假设总可以到达数组的最后一个位置要使用最少的跳跃次数有两种实现方式:最大跨越点算法找到能够到达最后一个元素的并且下标最小的点,也就是能达到最后一个元素的跨越程度的最大点。...原创 2020-10-17 13:33:22 · 3162 阅读 · 0 评论 -
LeetCode--55.跳跃游戏(贪心,零点跳跃)
跳跃游戏(C)1. 题目描述2. 题目分析3. C语言实现3.1 零点跳跃法3.2 贪心算法1. 题目描述难度:中等2. 题目分析这道题很有意思,我们需要知道的有这么几点:如果输入的数组每一位都是大于0的数,那么肯定能跳到最后的位置(比如每个位置就向前跳1)如果数组中出现0,那么除非该元素之前有能跳过这个零点的元素,否则无论如何也到不了最后一个所以实现的方法有两种:零点跳跃...原创 2020-10-17 13:33:34 · 3146 阅读 · 0 评论 -
LeetCode--80. 删除排序数组中的重复项Ⅱ(双指针,暴力)
删除排序数组中的重复项Ⅱ(C,Python)1. 题目描述2. 题目分析3. C语言实现4. Python实现1. 题目描述难度:中等2. 题目分析这道题是LeetCode–26. 删除排序数组中的重复项的进阶版,不过处理思路是一样的。根据题目,需要注意一下四点:给定的输入数组是已经排好序的需要在原地删除重复的元素,也就是说我们不可以在重新定义数组来存放结果,需要对原数组进行修改...原创 2020-03-04 14:36:41 · 3024 阅读 · 0 评论 -
LeetCode--41.缺失的第一个正数(C)
缺失的第一个正数(C)1. 题目描述2. 题目分析3. C语言实现3.1 申请额外空间实现3.2 原数组实现1. 题目描述难度:困难2. 题目分析这道题本质上是很简单的,但是加上了这个条件就会变得的很难实现:算法的时间复杂度为O(n), 只能使用常数级别的空间。这句话就说明了我们不能暴力穷举法(O(n^2)),以及对输入数组进行快速排序(nlogn)。具体的实现方法可以是这样的:...原创 2020-03-02 22:49:49 · 3033 阅读 · 0 评论 -
LeetCode--11.盛最多的水(双指针,暴力)
盛最多的水(C)1. 题目描述2. 题目分析3. C语言实现3.1 暴力穷举法3.2 双指针法1. 题目描述难度:中等2. 题目分析该题目数字化之后可以这么理解:给定数据[(a1,1), (a2,2), (a3,3)…(an, n)], 求解 min(ax, ay)*abs(x-y)的最大值。该题目有两种解法:暴力穷举法该方法是最容易想到的,依次穷举所有情况,然后输出最大值即可,...原创 2020-03-02 15:08:47 · 2998 阅读 · 0 评论 -
LeetCode--27. 移除元素(双指针)
移除元素(C, Python)1. 题目描述2. 题目分析3. C语言实现3.1 双指针排序法3.2 双指针乱序法4. Python实现1. 题目描述难度:简单2. 题目分析该题和26题很类似,解法也一样,需要注意的是一下几点:给定的输入数组是已经未排序的需要在原地删除重复的元素,也就是说我们不可以在重新定义数组来存放结果,需要对原数组进行修改返回的是修改之后数组的长度,而不是数...原创 2020-03-02 13:51:24 · 3035 阅读 · 0 评论 -
LeetCode--26. 删除排序数组中的重复项(双指针,暴力)
删除排序数组中的重复项(C, Python)1. 题目描述2. 题目分析3. C语言实现3.1 暴力求解法3.2 双指针法4. Python语言实现1. 题目描述难度:简单2. 题目分析根据题目,需要注意一下四点:给定的输入数组是已经排好序的需要在原地删除重复的元素,也就是说我们不可以在重新定义数组来存放结果,需要对原数组进行修改返回的是修改之后数组的长度,而不是数组本身不需要...原创 2020-03-01 23:49:09 · 3184 阅读 · 0 评论