当前位置:网站首页>golang刷leetcode:使数组按非递减顺序排列
golang刷leetcode:使数组按非递减顺序排列
2022-08-02 20:37:00 【用户9710217】
给你一个下标从 0 开始的整数数组 nums 。在一步操作中,移除所有满足 nums[i - 1] > nums[i] 的 nums[i] ,其中 0 < i < nums.length 。
重复执行步骤,直到 nums 变为 非递减 数组,返回所需执行的操作数。
示例 1:
输入:nums = [5,3,4,4,7,3,6,11,8,5,11]
输出:3
解释:执行下述几个步骤:
- 步骤 1 :[5,3,4,4,7,3,6,11,8,5,11] 变为 [5,4,4,7,6,11,11]
- 步骤 2 :[5,4,4,7,6,11,11] 变为 [5,4,7,11,11]
- 步骤 3 :[5,4,7,11,11] 变为 [5,7,11,11]
[5,7,11,11] 是一个非递减数组,因此,返回 3 。
示例 2:
输入:nums = [4,5,7,7,13]
输出:0
解释:nums 已经是一个非递减数组,因此,返回 0 。
提示:
1 <= nums.length <= 105
1 <= nums[i] <= 109
解题思路:
1,这种和附近元素相关的比较大小的算法一般是单调栈的思路。
2,题目思路分析,包括两个场景:
A,后面的元素比它紧挨着的前一个元素小,需要删除
B,如果几个元素连续递减可以被一次性删除
C,同时出现多个符合条件A,B的元素可以一次删除
3,对于位置i的元素,它一定被前面位置j的元素删除,其中j<i,且nums[j]>nums[i]
4,其中符合条件3的元素被删除的轮次为i,和之间删除的元素的最大轮次+1
5,如果连续递减,轮次不变
6,要求的就是最大轮次
7,如果栈中没有元素说明,当前元素是第一个,或者是当前最大的,它的轮次是0
8,如果没有删除情况下当前元素比栈顶元素小,那么他们的轮次和栈顶元素是一样的,是1
9,如果删除过情况下,当前元素比栈顶元素下,就是栈顶轮次加1,也就是3所说的
代码实现:
func totalSteps(nums []int) (ans int) {
var stack []numOrder
for _,num:=range nums{
maxOrder:=0
for len(stack)>0 && stack[len(stack)-1].num<=num{
maxOrder=max(maxOrder,stack[len(stack)-1].order)
stack=stack[:len(stack)-1]
}
if len(stack)>0{
maxOrder++
}
ans=max(ans,maxOrder)
stack=append(stack,numOrder{
num:num,
order:maxOrder,
})
}
return
}
type numOrder struct{ num, order int }
func max(a, b int) int { if b > a { return b }; return a }边栏推荐
- Day12 接口和协议
- Wiring diagrams of switches, motors, circuit breakers, thermocouples, and meters
- 用户之声 | 大学生的“课外学堂”
- HCIP--BGP基础实验
- Golang source code analysis: time/rate
- 2170. 使数组变成交替数组的最少操作数
- 用户之声 | 我与GBase的缘分
- Use the TCP protocol, we won't lost package?
- 【流媒体】推流与拉流简介
- Informatics orsay a tong (1258: 【 9.2 】 digital pyramid)
猜你喜欢

.NET性能优化-你应该为集合类型设置初始大小

信息系统项目管理师必背核心考点(五十八)变更管理的主要角色

Use the TCP protocol, we won't lost package?

Day35 LeetCode

【SLAM】DM-VIO(ros版)安装和论文解读
![Informatics Olympiad All-in-One (1259: [Example 9.3] Find the longest non-descending sequence)](/img/a2/6d548909341a65129db2e69b90e5bf.png)
Informatics Olympiad All-in-One (1259: [Example 9.3] Find the longest non-descending sequence)
Solve the docker mysql can't write Chinese

汇编语言中b和bl关键字的区别

一次线上事故,我顿悟了异步的精髓

「每周译Go」这次我们来点不一样的!--《How to Code in Go》系列上线
随机推荐
ABAP grammar small review
《分布式微服务电商》专题(一)-项目简介
【SLAM】DM-VIO(ros版)安装和论文解读
数据库分析与优化
Mysql用户管理
C#异步和多线程
How to quickly compare two byte arrays for equality in .NET
如何理解 swing 是非线程安全 (原创)
2018HBCPC个人题解
[C题目]力扣138. 复制带随机指针的链表
千人优学 | GBase 8s数据库2022年6月大学生专场实训圆满结束
C# Barrier类
什么是幂等
交 叉 数 组
Qt提升自定义控件,找不到头文件
php 单引号 双引号 -> => return echo
信息学奥赛一本通(1257:Knight Moves)
postgresql autovaccum自动清理
[C题目]力扣234. 回文链表
你是几星测试/开发程序员?技术型选手王大拿......