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


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

    一,力扣115,最小栈

    . - 力扣(LeetCode)

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

    1. class MinStack {
    2. int[] el;
    3. int numsize;
    4. public MinStack() {
    5. el = new int[10000];
    6. int numsize = 0;
    7. }
    8. // private void grow(){
    9. // this.el=Arrays.copyof(el,2*el.lenth);
    10. // }
    11. public void push(int val) {
    12. // if (el.lenth == numsize) {
    13. // grow();
    14. // }
    15. el[numsize] = val;
    16. numsize++;
    17. }
    18. public int pop() {
    19. if (empty())
    20. return -1;
    21. return el[--numsize];
    22. }
    23. public int top() {
    24. return el[numsize - 1];
    25. }
    26. private boolean empty() {
    27. return numsize == 0;
    28. }
    29. public int getMin() {
    30. int num = el[0];
    31. for (int i = 0; i < numsize; i++) {
    32. if (el[i] < num)
    33. num = el[i];
    34. }
    35. return num;
    36. }
    37. }
    38. /**
    39. * Your MinStack object will be instantiated and called as such:
    40. * MinStack obj = new MinStack();
    41. * obj.push(val);
    42. * obj.pop();
    43. * int param_3 = obj.top();
    44. * int param_4 = obj.getMin();
    45. */

    二,杨辉三角

    . - 力扣(LeetCode)

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

    1. class Solution {
    2. public List> generate(int numRows) {
    3. List> ret=new ArrayList<>();
    4. List list=new ArrayList<>();
    5. list.add(1);
    6. ret.add(list);
    7. for(int i=1;i
    8. List row=new ArrayList<>();
    9. row.add(1);
    10. List a= ret.get(i-1);
    11. for (int j = 1; j < i; j++) {
    12. int val1=a.get(j);
    13. int val2=a.get(j-1);
    14. row.add(val1+val2);
    15. }
    16. row.add(1);
    17. ret.add(row);
    18. }
    19. return ret;
    20. }
    21. }

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

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

    . - 力扣(LeetCode)

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

    1. class Solution {
    2. public int evalRPN(String[] tokens) {
    3. Stack st = new Stack();
    4. for (int i = 0; i < tokens.length; i++) {
    5. String str = tokens[i];
    6. if (o(str) == false) {
    7. int val = Integer.parseInt(str);
    8. st.push(val);
    9. } else {
    10. int val1 = st.pop();
    11. int val2 = st.pop();
    12. switch (str) {
    13. case "+":
    14. st.push(val2+val1);
    15. break;
    16. case "-":
    17. st.push(val2-val1);
    18. break;
    19. case "*":
    20. st.push(val2*val1);
    21. break;
    22. case "/":
    23. st.push(val2/val1);
    24. break;
    25. }
    26. }
    27. }
    28. return st.peek();
    29. }
    30. private boolean o (String s){
    31. if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) {
    32. return true;
    33. }
    34. return false;
    35. }
    36. }

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

  • 相关阅读:
    NodeJS 实战系列:DevOps 尚未解决的问题
    【全网最细】自动化测试注意事项+问题点汇总,不要再走弯路了...
    spark on yarn 的执行过程以及日志分析
    第二届上汽零束SOA平台开发者大会揭幕,智能汽车生态加速落地
    nRF52832 之ADC的使用
    《Java》小项目,吃货联盟
    ISPE GAMP5 中文版
    SDK 2019.1 - GNU Debugger (GDB) 不正常工作
    Mysql、Hive、Sqoop的安装及配置
    在Ubuntu20.04环境下安装GRPC
  • 原文地址:https://blog.csdn.net/2302_81982408/article/details/140336572