牛客网左程云
文章平均质量分 73
穷理何须格物
你就是医我的药
展开
-
未排序正数数组中累加和为给定值的最长子数组长度
来自牛客网左程云算法第二课第二题问题: 给定一个数组 arr,该数组无序,但每个值均为正数,再给定一个正数 k。求 arr 的所有子数组中所有元素相加和为 k 的最长子数组长度。 例如,arr=[1,2,1,1,1],k=3。 累加和为 3 的最长子数组为[1,1,1],所以结果返回 3。 要求: 时间复杂度 O(N),额外空间复杂度 O(1)分析:我们最容易想到的解法还是暴力,暴力出原创 2016-08-16 10:10:46 · 1648 阅读 · 1 评论 -
leetcode11. Container With Most Water两根柱子围成最大面积
牛客网第一课第三题问题:给定一个非负数的数组,数组中的每个值代表一个柱子的高度,柱子的宽度是1。两个柱子之间可以围成一个面积,规定:面积=两根柱子的最小值*两根柱子之间的距离。例子:数 组[3,4,2,5]。3和4之间围成的面积为0,因为两个柱子是相邻的,中间没有距离。3和 2之间围成的面积为2,因为两个柱子的距离为1,且2是最短的柱子,所以面积=1*2。3和5之间围成的面积为6,因为两个原创 2016-08-13 16:16:55 · 870 阅读 · 1 评论 -
leetcode 42. Trapping Rain Water
牛客网第一课的第二题问题:.给定一个非负数的数组,代表一个容器。例如数组[0,1,0,2,1,0,1,3,2,1,2,1],就是以下图形中黑色的部分。如果用这个容器接水的话,请问可以接多少水?还以这个数组为例, 可以接6格水,就是以下图形中蓝色的部分。 要求:实现时间复杂度O(N),额外空间复杂度O(1)的解法。比较朴素的想法就是我们把数组中的数当作容器壁,求出各个容器壁之间可以存多少原创 2016-08-12 22:02:48 · 356 阅读 · 0 评论 -
leetcode 354 Russian Doll Envelopes 二元组最长递增子序列
最近在牛客网听左神讲课,在此记录一下。题目是leetcode 354. Russian Doll Envelopes问题:给定一个N*2的二维数组,看作是一个个二元组,例如[[a1,b1],[a2,b2],[a3,b3]], 规定:一个如果想把二元组甲放在二元组乙上,甲中的a值必须大于乙中的a值,甲中的b 值必须大于乙中的b值。如果在二维数组中随意选择二元组,请问二元组最多可以往上摞几个?原创 2016-08-11 20:03:33 · 1025 阅读 · 0 评论 -
求累加和小于等于k的最大子矩阵
来自牛客网左程云第三课第二题问题:给定一个无序矩阵,其中有正,有负,有 0,再给定一个值 k,求累加和小于等于 k 的最大子矩阵大小,矩阵的大小用其中的元素个数来表示。分析:这个问题也是一个子矩阵问题,参看求子矩阵的最大和的分析,我们同样可以将其转换成子数组问题。本题的算法原型是未排序数组中累加和小于或等于给定值的最长子数组长度。解法:我们求出以每一行的为首行的子矩阵的列累加和,就是将原创 2016-08-20 09:59:25 · 1401 阅读 · 0 评论 -
求子矩阵的最大和
来自牛客网左程云第三课第一题问题:给定一个无序矩阵,其中有正,有负,有 0,求子矩阵的最大和。要求:时间复杂度O(N^3)分析:一个最直接的方法就是找到所有的子矩阵,然后遍历这些子矩阵并计算其累加和,找出最大的。矩阵将矩阵中的每一个点作为子矩阵的左上角,我们可以得到N*N的数量级的子矩阵数量。那么一共有N*N个点可以作为子矩阵的左上角,子矩阵的数量到达O(N^4)的数量级,我们在计算每原创 2016-08-19 22:25:42 · 3174 阅读 · 0 评论 -
未排序数组中累加和小于或等于给定值的最长子数组长度
问题: 给定一个无序数组 arr,其中元素可正、可负、可 0,给定一个整数 k。求 arr 所有的子数组中累加和小于或等于 k 的最长子数组长度。 例如:arr=[3,-2,-4,0,6],k=-2,相加和小于或等于-2 的最长子数组为 {3,-2,-4,0},所以结果返回 4。要求: 时间复杂度(N*logN)分析:这个问题和前一篇的问题很像,区别在于本题是小于或等于的。那么我们是否能用原创 2016-08-18 10:18:48 · 3413 阅读 · 3 评论 -
未排序数组中累加和为给定值的最长子数组系列问题
牛客网左程云第二课第三题,这是一个很重要的算法原型。问题:给定一个无序数组 arr,其中元素可正、可负、可 0,给定一个整数 k。求 arr 所有的子数组中累加和为 k 的最长子数组长度。 要求:时间复杂度 O(N)分析:本题和未排序正数数组中累加和为给定值的最长子数组长度这个问题的区别在于,数组中的数和给定的k值是任意整数,可以为正、负、零。上一个问题只能是整数。那么我们是否能用原创 2016-08-17 11:13:47 · 2411 阅读 · 5 评论 -
求两个子数组最大的累加和
来自牛客网左程云算法第二堂课第一题问题:给定一个数组,其中当然有很多的子数组,在所有两个子数组的组合中,找到相加和最大的一组,要求两个子数组无重合的部分。最后返回累加和。 要求: 时间复杂度达到 O(N)解法:这道题的算法原型就是子数组的zui'da原创 2016-08-15 10:30:23 · 1607 阅读 · 0 评论