作者推荐map|动态规划|单调栈|LeetCode975:奇偶跳本文涉及的基础知识点单调栈分类、封装和总结题目给你一个长度为n的正整数数组nums和一个整数k。一开始,你的分数为1。你可以进行以下操作至多k次,目标是使你的分数最大:选择一个之前没有选过的非空子数组nums[l,…,r]。从nums[l,…,r]里面选择一个质数分数最高的元素x。如果多个元素质数分数相同且最高,选择下标最小的一个。将你的分数乘以x。nums[l,…,r]表示nums中起始下标为l,结束下标为r的子数组,两个端点都包含。一个整数的质数分数等于x不同质因子的数目。比方说,300的质数分数为3,因为300=2*2*3*
本文涉及知识点C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例包括课程视频单调双队列贪心题目给你一个下标从0开始的整数数组nums。你可以执行任意次操作。每次操作中,你需要选择一个子数组,并将这个子数组用它所包含元素的和替换。比方说,给定数组是[1,3,5,6],你可以选择子数组[3,5],用子数组的和8替换掉子数组,然后数组会变为[1,8,6]。请你返回执行任意次操作以后,可以得到的最长非递减数组的长度。子数组指的是一个数组中一段连续非空的元素序列。示例1:输入:nums=[5,2,2]输出:1解释:这个长度为3的数组不是非递减的。我们有2种方案使数组长度为2。第一种,选择子数组
1901.寻找峰值II文章目录【算法】在二维不单调的矩阵上二分查找——力扣1901.寻找峰值II问题描述示例解决思路步骤一:列转行步骤二:回到一维数组上的寻找峰值的思路步骤三:二分搜索代码实现二分示意图二分初始的状态二分更新说明二分更新后的状态性能分析【算法】在二维不单调的矩阵上二分查找——力扣1901.寻找峰值II问题描述给定一个从0开始编号的mxn矩阵mat,其中任意两个相邻格子的值都不相同。峰值是指那些严格大于其相邻格子(上、下、左、右)的元素。需要找出任意一个峰值mat[i][j]并返回其位置[i,j]。示例示例1:输入:mat=[[1,4],[3,2]]输出:[0,1]解释:3和4都
涉及知识点单调队列题目给你一个数组points和一个整数k。数组中每个元素都表示二维平面上的点的坐标,并按照横坐标x的值从小到大排序。也就是说points[i]=[xi,yi],并且在1请你找出yi+yj+|xi-xj|的最大值,其中|xi-xj|题目测试数据保证至少存在一对能够满足|xi-xj|示例1:输入:points=[[1,3],[2,0],[5,10],[6,-10]],k=1输出:4解释:前两个点满足|xi-xj|没有其他满足条件的点,所以返回4和1中最大的那个。示例2:输入:points=[[0,0],[3,0],[9,2]],k=3输出:3解释:只有前两个点满足|xi-xj|提
作者推荐map|动态规划|单调栈|LeetCode975:奇偶跳本文涉及的基础知识点单调栈分类、封装和总结题目给你一个整数数组nums和一个整数threshold。找到长度为k的nums子数组,满足数组中每个元素都大于threshold/k。请你返回满足要求的任意子数组的大小。如果没有这样的子数组,返回-1。子数组是数组中一段连续非空的元素序列。示例1:输入:nums=[1,3,4,3,1],threshold=6输出:3解释:子数组[3,4,3]大小为3,每个元素都大于6/3=2。注意这是唯一合法的子数组。示例2:输入:nums=[6,5,6,5,8],threshold=7输出:1解释:子
作者推荐map|动态规划|单调栈|LeetCode975:奇偶跳涉及知识点单调双向队列二叉树题目给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例1:输入:nums=[1,3,-1,-3,5,3,6,7],k=3输出:[3,3,5,5,6,7]解释:滑动窗口的位置最大值[13-1]-3536731[3-1-3]5367313[-1-35]367513-1[-353]67513-1-3[536]7613-1-35[367]7示例2:输入:nums=[1],k=1输出:[1
文章目录题单来源经典题单496.下一个更大元素I(单调栈模板题)503.下一个更大元素II(单调栈+循环数组)2454.下一个更大元素IV(第二个更大的元素:两个单调栈)456.132模式(单调栈找上一个更大元素+哈希表记录最小值)739.每日温度901.股票价格跨度1019.链表中的下一个更大节点1124.表现良好的最长时间段(单调栈解法⭐⭐⭐⭐⭐)1475.商品折扣后的最终价格(单调栈找下一个更小的元素)2289.使数组按非递减顺序排列⭐⭐⭐⭐⭐解法——等价转换+利用单调性🐂矩形系列字典序最小贡献法2818.操作使得分最大(⭐质因数分解+单调栈贡献法+排序贪心)好题!更多题目题单来源htt
LeetCode-42.接雨水【栈数组双指针动态规划单调栈】题目描述:解题思路一:单调栈,维护一个单调递减栈。每当遇到当前元素大于栈顶元素就出栈,在出栈时更新答案。当遇到出栈的情况,若单调栈栈左边有一个元素则必有height[left]>height[top],有因为当前元素大于栈顶,那么可以得到当前的接到的雨水量,宽是i-left-1,长是min(height[i],height[left])-height[top]。根据宽度和高度即可计算得到该区域能接的雨水量。解题思路二:动态规划,其实很简单。我们只需要知道一个结论,遇到当前元素i,这个位置接的雨水量是min(leftMax[i],rig
作者推荐【贪心算法】【中位贪心】.执行操作使频率分数最大涉及知识点单调栈题目在一条单车道上有n辆车,它们朝着同样的方向行驶。给你一个长度为n的数组cars,其中cars[i]=[positioni,speedi],它表示:positioni是第i辆车和道路起点之间的距离(单位:米)。题目保证positionispeedi是第i辆车的初始速度(单位:米/秒)。简单起见,所有车子可以视为在数轴上移动的点。当两辆车占据同一个位置时,我们称它们相遇了。一旦两辆车相遇,它们会合并成一个车队,这个车队里的车有着同样的位置和相同的速度,速度为这个车队里最慢一辆车的速度。请你返回一个数组answer,其中an
作者推荐【贪心算法】【中位贪心】.执行操作使频率分数最大涉及知识点单调栈动态规划map题目给定一个整数数组A,你可以从某一起始索引出发,跳跃一定次数。在你跳跃的过程中,第1、3、5…次跳跃称为奇数跳跃,而第2、4、6…次跳跃称为偶数跳跃。你可以按以下方式从索引i向后跳转到索引j(其中i在进行奇数跳跃时(如,第1,3,5…次跳跃),你将会跳到索引j,使得A[i]在进行偶数跳跃时(如,第2,4,6…次跳跃),你将会跳到索引j,使得A[i]>=A[j],A[j]是可能的最大值。如果存在多个这样的索引j,你只能跳到满足要求的最小索引j上。(对于某些索引i,可能无法进行合乎要求的跳跃。)如果从某一索引开