2289. 使数组按非递减顺序排列
给你一个下标从
重复执行步骤,直到
示例 1:
输入:nums = [5,3,4,4,7,3,6,11,8,5,11] |
示例 2:
输入:nums = [4,5,7,7,13] |
提示:
解法一
首先知道了这题是单调栈,然后直接往这个方向上想,糊了一个很奇怪的解法,但是 AC 了,看了题解区没有和我一样的。
我的理解是,逆序构建一个单调递减栈,栈中的元素都是待消除的,栈中相邻的元素必然不是同一轮被消除,所以统计最大的消除深度就是最大的轮次,时间复杂度
// [5,3,4,4,7,3,6,11,8,5,11] |
解法二
如果是比赛的时候肯定是没时间去想单调栈的解法,链表模拟是比较自然的想法。
模拟的能力比较差,思路不清晰,还需要多练一下。
func totalSteps(nums []int) int { |
2290. 到达角落需要移除障碍物的最小数目
给你一个下标从
你可以向上、下、左、右移动,从一个空单元格移动到另一个空单元格。
现在你需要从左上角
示例 1:
输入:grid = [[0,1,1],[1,1,0],[1,1,0]] |
示例 2:
输入:grid = [[0,1,0,0,0],[0,1,0,1,0],[0,0,0,1,0]] |
提示:
为 或
解法一
0-1BFS,很直白,比 t3 简单,时间复杂度
func minimumObstacles(grid [][]int) int { |