7月11日学习打卡,数据结构栈

大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不足之处也请指出,谢谢大家。

一,力扣115,最小栈

. - 力扣(LeetCode)

简单用数组模拟一个栈即可,不过我这里图省事运行速度不太高,优化空间很大

java 复制代码
class MinStack {

    int[] el;
    int numsize;

    public MinStack() {
        el = new int[10000];
        int numsize = 0;
    }

    // private void grow(){
    // this.el=Arrays.copyof(el,2*el.lenth);
    // }

    public void push(int val) {
        // if (el.lenth == numsize) {
        // grow();
        // }
        el[numsize] = val;
        numsize++;
    }

    public int pop() {
        if (empty())
            return -1;
        return el[--numsize];
    }

    public int top() {
        return el[numsize - 1];

    }

    private boolean empty() {
        return numsize == 0;
    }

    public int getMin() {
        int num = el[0];
        for (int i = 0; i < numsize; i++) {
            if (el[i] < num)
                num = el[i];
        }
        return num;
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

二,杨辉三角

. - 力扣(LeetCode)

分析:为了因用前面学习过的顺序表,这题我们采用顺序表解决,用顺序表模拟一个二维数组,注意顺序表模拟的二维数组不能简单通过下标访问元素

java 复制代码
        class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ret=new ArrayList<>();
        List<Integer> list=new ArrayList<>();
        list.add(1);
        ret.add(list);
        for(int i=1;i<numRows;i++){
            List<Integer> row=new ArrayList<>();
            row.add(1);
            List<Integer> a= ret.get(i-1);
            for (int j = 1; j < i; j++) {
                int val1=a.get(j);
                int val2=a.get(j-1);
                row.add(val1+val2);
            }
            row.add(1);
            ret.add(row);
        }
        return ret;
    }
}

三,力扣150,逆波兰表达式求值

注:波兰表达式是一种能被计算机理解的式子

. - 力扣(LeetCode)

思路:遍历数组,先判断字符串是否是数字,如果是数字,则转化为数字进栈,否则,取出两个操作数,按照操作符用后取出的"+""-""*"或"/"后一个,最后栈里剩的便是最终答案

java 复制代码
class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> st = new Stack();
        for (int i = 0; i < tokens.length; i++) {
            String str = tokens[i];
            if (o(str) == false) {
                int val = Integer.parseInt(str);
                st.push(val);
            } else {
                int val1 = st.pop();
                int val2 = st.pop();
                switch (str) {
                    case "+":
                        st.push(val2+val1);
                        break;
                    case "-":
                        st.push(val2-val1);
                        break;
                        case "*":
                        st.push(val2*val1);
                        break;
                        case "/":
                        st.push(val2/val1);
                        break;
                }

            }
        }
        return st.peek();
    }



        private boolean o (String s){
            if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) {

                return true;
            }
            return false;
        }
    }

本期博客就到这里,谢谢大家

相关推荐
6230_19 分钟前
关于HTTP通讯流程知识点补充—常见状态码及常见请求方式
前端·javascript·网络·网络协议·学习·http·html
北南京海1 小时前
【C++入门(5)】类和对象(初始类、默认成员函数)
开发语言·数据结构·c++
阿拉伯的劳伦斯2921 小时前
LeetCode第一题(梦开始的地方)
数据结构·算法·leetcode
Mr_Xuhhh1 小时前
C语言深度剖析--不定期更新的第六弹
c语言·开发语言·数据结构·算法
日记成书1 小时前
【无线通信发展史⑨】1791年路易吉·伽伐尼-关于动物电的研究与1800年亚历山大·伏打伯爵-电池:伏打电池
网络·人工智能·学习·职场和发展·信息与通信
贾saisai2 小时前
Xilinx系FPGA学习笔记(四)VIO、ISSP(Altera)及串口学习
笔记·学习·fpga开发
月夕花晨3742 小时前
C++学习笔记(13)
c++·笔记·学习
probably1212 小时前
学习记录之Java学习笔记3
java·笔记·学习
桃酥4032 小时前
算法day22|组合总和 (含剪枝)、40.组合总和II、131.分割回文串
数据结构·c++·算法·leetcode·剪枝
桃酥4032 小时前
算法day21|回溯理论基础、77. 组合(剪枝)、216.组合总和III、17.电话号码的字母组合
java·数据结构·c++·算法·leetcode·剪枝