力扣刷题最小栈的实现

97 阅读2分钟

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 八 天,点击查看活动详情

力扣9.回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

  • 例如,121 是回文,而 123 不是。

整数转为字符串来解决

class Solution {
    public boolean isPalindrome(int x) {
        int abs = Math.abs(x);
        String str = String.valueOf(x);
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)!=str.charAt(str.length()-i-1))return false;
        }
        return true;
    }
}

剑指offer

栈里面使用add和push的不同作用,这里一开始想用add但发现无法过样例。

发现add是继承自Vector的方法,返回值boolean,push是stack自带的方法,这里看官方题解里面new LinkedList。
LinkedList和ArrayDeque都可以模拟栈、队列,差别是LinkedList插入删除快,
ArrayDeque内部是数组形式存储数据,查询方便,插入删除慢,这里主要作用是插入删除最后一个值,
所以用链表更好一些。等于是将链表传给了Deque,可以调用其方法进行插入删除末尾数字。
这里声明栈时如果使用list,由于list没有内置的获取末尾值的函数,
必须传入索引才可以拿值,如果要直接删等于要用队列再实现栈的功能,非常麻烦,这里直接使用

deque和queue的关系:

deque是queue的子接口,deque常用子类包括LinkedLis、ArrayDeque,Deque是双端队列,可以peekFirst,pollFirst。这里发现取值每次去的都是队列头部的值,peek,感觉这里应该拿取队尾的值,不知道为什么要取队首。看官方动图解释这里应该取队尾的元素。
deque的方法里可以删除队头队尾元素,添加队头队尾元素也都可以实现
使用Deque - 廖雪峰的官方网站 (liaoxuefeng.com)

class MinStack {
    Deque<Integer> sta;
    Deque<Integer> minSta;
    /** initialize your data structure here. */
    public MinStack() {
        sta = new ArrayDeque<Integer>();
        minSta = new ArrayDeque<Integer>();
        minSta.push(Integer.MAX_VALUE);
    }
    
    public void push(int x) {
        sta.push(x);
        minSta.push(Math.min(minSta.peek(),x));
    }
    
    public void pop() {
        sta.pop();
        minSta.pop();
    }
    
    public int top() {
        return sta.peek();
    }
    
    public int min() {
        return minSta.peek();
    }
}