题解 | #最大体重的牛#
最大体重的牛
https://www.nowcoder.com/practice/0333d46aec0b4711baebfeb4725cb4de
使用两个栈来实现:一个栈存储牛的体重,另一个栈存储当前栈中的最大体重。
当推入新元素时,同时更新最大体重栈。
当弹出元素时,同时更新最大体重栈。
在常数时间内获取最大权值的牛的体重时,直接从最大体重栈中获取顶部元素即可。。
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param op string字符串一维数组
* @param vals int整型二维数组
* @return int整型一维数组
*/
type MaxCowStack struct{
stack []int
maxStack []int
}
func Constructor()MaxCowStack{
return MaxCowStack{}
}
func (c *MaxCowStack)Pop(){
if c.stack[len(c.stack)-1]==c.maxStack[len(c.maxStack)-1]{
c.maxStack=c.maxStack[:len(c.maxStack)-1]
}
c.stack=c.stack[:len(c.stack)-1]
}
func(c *MaxCowStack)Push(id int,weight int){
c.stack=append(c.stack, weight)
if len(c.maxStack)==0||weight>c.maxStack[len(c.maxStack)-1]{
c.maxStack=append(c.maxStack, weight)
}
}
func(c *MaxCowStack)GetMax()int{
return c.maxStack[len(c.maxStack)-1]
}
func(c *MaxCowStack)Top()int{
return c.stack[len(c.stack)-1]
}
func max_weight_cow( op []string , vals [][]int ) []int {
// write code here
res := []int{}
maxCowStack := Constructor()
for i, operation := range op {
if operation == "push" {
maxCowStack.Push(vals[i][0], vals[i][1])
res = append(res, -1) // 占位符
} else if operation == "pop" {
maxCowStack.Pop()
res = append(res, -1) // 占位符
} else if operation == "top" {
res = append(res, maxCowStack.Top())
} else if operation == "getMax" {
res = append(res, maxCowStack.GetMax())
}else if operation == "MaxCowStack" {
res = append(res, -1)
}
}
return res
}