大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不足之处也请指出,谢谢大家。
简单用数组模拟一个栈即可,不过我这里图省事运行速度不太高,优化空间很大
- 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();
- */
分析:为了因用前面学习过的顺序表,这题我们采用顺序表解决,用顺序表模拟一个二维数组,注意顺序表模拟的二维数组不能简单通过下标访问元素
-
- class Solution {
- public List
> generate(int numRows) {
- List
> ret=new ArrayList<>();
- List
list=new ArrayList<>(); - list.add(1);
- ret.add(list);
- for(int i=1;i
- List
row=new ArrayList<>(); - row.add(1);
- List
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,逆波兰表达式求值
注:波兰表达式是一种能被计算机理解的式子
思路:遍历数组,先判断字符串是否是数字,如果是数字,则转化为数字进栈,否则,取出两个操作数,按照操作符用后取出的“+”“-”“*”或“/”后一个,最后栈里剩的便是最终答案
- class Solution {
- public int evalRPN(String[] tokens) {
- Stack
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;
- }
- }
-
本期博客就到这里,谢谢大家