题解 | #包含min函数的栈#

包含min函数的栈

http://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49

C语言实现包含min函数的栈操作

  1. 思路:简单的栈很容易实现,重点是如何维护min最小值,最简单的想法,每次计算栈元素最小值存放到一个地方,显然时间复杂度成本过高。使用额外的栈来实现,比如说我依次入栈 5 7 8 6 3 2 4,那么设置记录最小值的栈存放 5 3 2。每次入栈时和最小值栈顶比较,判断是否需要记录。出栈同样比较是否需要弹出。
  2. 重点:双栈实现 辅助栈只记录降序元素
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param value int整型 
 * @return 无
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
//
static int stack[300],min_s[300];
static int s_top=0,m_top=0;
void push(int value ) {
    // write code here
    //第一次入栈 该值作为最小值
    if(m_top==0){
        min_s[m_top++]=value;
    }
    else{
        //小于之前的值 入最小维护栈
        if(value<=min_s[m_top-1]){
            min_s[m_top++]=value;
        }
    }   
    stack[s_top++]=value;
}

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param 无 
 * @return 无
 */
void pop() {
    // write code here
    if(stack[s_top-1]==min_s[m_top-1])
    {
        m_top--;
    }
    s_top--;
    
}

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param 无 
 * @return int整型
 */
int top() {
    // write code here
    return stack[s_top-1];
    
}

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param 无 
 * @return int整型
 */
int min() {
    // write code here
    return min_s[m_top-1];
    
}
全部评论

相关推荐

中信银行 AI算法岗 29~32w
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务