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