刷剑指offer遇到的问题

来源:7-7 二分搜索树中的问题 Lowest Common Ancestor of a Binary Search Tree

qq_往事_8

2019-11-05

题目是这样的,要求实现一个带有min函数的栈
图片描述

下面是我的代码

public class Solution {

    Stack<Integer> stack = new Stack<>();
    Stack<Integer> minStack = new Stack<>();

    public void push(int node) {
        stack.push(node);
        if (minStack.isEmpty()){
            minStack.push(node);
        }
        if (!minStack.isEmpty() && minStack.peek() > node){

            minStack.push(node);
        }
    }

    public void pop() {
        if (stack.isEmpty() && minStack.isEmpty()){
            return;
        }
        stack.pop();
        if (stack.peek().equals(minStack.peek())){
            minStack.remove(stack.peek());
        }
    }

    public int top() {
        return stack.peek();
    }

    public int min() {
        
        return minStack.peek();
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.push(3);
        System.out.println(solution.min());
        solution.push(4);
        System.out.println(solution.min());
        solution.push(2);
        System.out.println(solution.min());
        solution.push(3);
        System.out.println(solution.min());
        solution.pop();
        System.out.println(solution.min());
        solution.pop();
        System.out.println(solution.min());
        solution.pop();
        System.out.println(solution.min()); //这行会遇到遇到问题
        solution.push(0);
        System.out.println(solution.min());
    }
}

在提交时会遇到这个问题
图片描述
如果把代码中出问题的行注释掉就会的到正确的结果,也就是在当minStack为空时就什么都不返回,可是什么都不返回应该怎么写啊。min()方法总是要返回一个值,抛出异常提交也不能通过,

这下应该怎么改啊

写回答

1回答

liuyubobobo

2019-11-06

抱歉,我没有特别理解你的问题。因为你注释出问题的行在 main 函数中,但是 main 函数和你设计的 minStack 逻辑无关,是你的测试代码有问题。


这就好比你使用 Java 标准库中的栈,也不能从一个空栈中取出栈顶元素。如果你从空栈中取出栈顶元素,也会报错。但这不意味着Java标准库中的栈实现有问题,意味着你使用栈的方式有问题。


因为我没有看过《剑指 Offerr》,所以我不确定我是否正确理解了你的问题。如果我对问题的理解不正确,还请去《剑指 Offerr》相关讨论社区去解决你的问题。这个课程可以回答 Leetcode 上的所有问题:)


继续加油!:)

0
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程