leetcode
nielaishan
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 152. 乘积最大子数组
题目链接:https://leetcode.cn/problems/maximum-product-subarray//**解法1: 贪心做法:因为时乘积,由此得出以下结论1、出现0,肯定分割为前后两个段,从这两个段内找乘积最大2、在[2,-1,-3,-2,4]数组中,出现负数的个数为奇数时,将导致乘积为负数;2.1 所以要将数组中的总乘积48, 除以从数组中的第一个负数位置开始从右往左的每个数;2.2 所以要将数组中的总乘积48, 除以从数组中的最后一个负数位置开始从左往右的每个数;2.3原创 2022-05-23 08:56:18 · 294 阅读 · 0 评论 -
LeetCode 64. 最小路径和
/**二维转移方程:dp[i][j] = min(dp[i-1][j] , d[i][j-1]) + grid[i][j];dp[i][j] 为从(0,0)到(i,j)路径最小值从题目描述就可得到,当前位置的最小值,肯定来自上面([i-1][j])的位置和左面([i][j-1])的位置的最小值加上当前位置的数值特殊处理:i==0 或者 j==0 只能累加当前列或当前行二维数组解法:清晰,明确进阶版:滚动数组转移方程:dp[j] = min(dp[j], dp[j-1]) + grid[i.原创 2022-05-23 08:20:14 · 229 阅读 · 0 评论 -
LeetCode 11. 盛最多水的容器
/**[1,8,6,2,5,4,8,3,7]双指针算法left指向头,right指向尾这时应该移动left还是right呢1. 应该移动高度小的那个位置height[left] <= height[right]1.1 移动left指针,若移动时,while height[left+1] <= height[left] left++; 因为比height[left]还小,面积肯定更小,实际就是找到第一个比height[left]大的数1.2 移动right指针时,同理*/f.原创 2022-05-17 13:52:07 · 291 阅读 · 0 评论 -
LeetCode 31. 下一个排列
/**1,2,3,41,2,4,31,3,2,41,3,4,21,4,2,31,4,3,22,1,3,42,1,4,32,3,1,42,3,4,1...4,3,2,1从以上得到规律解题思路1. 从后往前找到第一个相邻升序的位置 i, i+12. 从后往前找到第一个比a[i]的大的数 k3. 交换a[i] a[k]4. 然后将i+1之后的位置,reverse*/func nextPermutation(nums []int) { i, j, k := len(.原创 2022-05-17 09:59:40 · 216 阅读 · 0 评论 -
LeetCode 221.最大正方形 解法
/**LeetCode 221.最大正方形形成2*2的小正方形,基础上[ [a, b] [c, d(?)]]若b >= a && c >= a说明d所在的一个正方形可以在a的基础上,扩充一行一列,变为长宽为a+1的正方形否则d为Min(b, c)的最小值为长宽的正方形,增加一行一列,变为长宽为Min(b, a)+1的正方形 */func maximalSquare(matrix [][]byte) int { rowLen := len(matrix) .原创 2020-05-09 13:40:39 · 299 阅读 · 0 评论 -
LeetCode 632.最小区间
/**LeetCode 632.最小区间解题思路:排序、离散化把所有数字按照数值大小从小到大排序,但是每个携带属于哪个k(行)然后把排序后的数字,离散化。例如: [34,56,10000]离散后,为[0,1,2]若有相同的数字要记录不同的k(属于哪个行)。然后每个离散后的数字以此为起点,找一个满足条件的区间 */func smallestRange(nums [][]int) [...原创 2020-05-08 14:59:34 · 324 阅读 · 0 评论 -
LeetCode 带限制的子序列和
/**LeetCode 带限制的子序列和由题意可知,第i位的最大子序和,是在区间[i-k, i-1]中的最大值加上nums[i],但是若得出的结果,比nums[i]小,便舍弃。转移方程:dp[i] = Max(nums[i], dp[i-k...i-1] + nums[i])初始化:dp[0] = nums[0]利用堆heap维护dp[i-k...i-1]的递减序列*/func...原创 2020-05-07 11:01:37 · 293 阅读 · 0 评论 -
LeetCode 对角线遍历II
/**LeetCode 对角线遍历 II对于同一个对角线上,i与j相加的值是相同的,而且i越大,越早输出由此,可以通过设置一个比较大的数值为一个位置的权重,同一个对角线的权重相同,而i也是影响输出时机以此基础,可以通过排序,获的输出时机*/func findDiagonalOrder(nums [][]int) []int { cnt := len(nums) // 权重初始化...原创 2020-04-27 21:21:47 · 283 阅读 · 0 评论 -
LeetCode 生成数组
/**dp[n][k][m] 定义为:n个位置,k个search_cost,以m结尾的数组种类个数由这个定义,可得初始化dp[1][1][1...m] = 1转移方程为:dp[n][k][m] = m*dp[n-1][k][m] + dp[n-1][k-1][m-1] + dp[n-1][k-1][m-2] + ... + dp[n-1][k-1][1]由此最后结果:n个位置,k个se...原创 2020-04-26 13:07:26 · 311 阅读 · 0 评论 -
LeetCode 数青蛙
问题内容给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合。由于同一时间可以有多只青蛙呱呱作响,所以croakOfFrogs 中会混合多个 “croak” 。请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。注意:要想发出蛙鸣 "croak",青蛙必须 依序 输出 ‘c’, ’r’, ’o’, ’a’, ’k’ 这 5 个字母。如果没...原创 2020-04-21 13:10:22 · 463 阅读 · 0 评论 -
LeetCode--买卖股票的最佳时机系列
买卖股票的最佳时机I通过一次交易,获得最大利润,可以使用栈维护一个上升子序列,若第i天的价格大于栈顶元素,入栈,并计算栈底和栈顶的差值,记录这个差值;若第i天的价格小于栈顶元素,循环出栈,直到大于栈顶元素或者栈为空;type Stack struct { Sli []int Len int}func (s *Stack) Push(val int) { s.Sli[s.Len...原创 2020-03-22 18:15:54 · 611 阅读 · 0 评论
分享