2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Hallo zusammen, der Zweck dieses Blogs besteht darin, den Studien-Check-in während der Sommerferien aufzuzeichnen. Er wird später in einer Kolumne organisiert. Die Hauptabsicht besteht darin, das Studium der Datenstrukturen während der Sommerferien abzuschließen Veröffentlichen Sie einige verwandte Blogs über die Implementierung von Datenstrukturen und einige Tests zum persönlichen Lernen und zur Verwendung. Bitte weisen Sie mich auf etwaige Mängel hin.
Verwenden Sie einfach ein Array, um einen Stapel zu simulieren, aber hier versuche ich, Ärger zu sparen, und die Laufgeschwindigkeit ist nicht sehr hoch und es gibt viel Raum für Optimierung.
- 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();
- */
Analyse: Um die zuvor gelernte Sequenztabelle zu verwenden, verwenden wir die Sequenztabelle, um ein zweidimensionales Array zu simulierenDas durch die Sequenztabelle simulierte zweidimensionale Array kann nicht einfach über Indizes auf Elemente zugreifen.
-
- 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;
- }
- }
-
Hinweis: Der polnische Ausdruck ist ein Ausdruck, der von Computern verstanden werden kann
Idee: Durchlaufen Sie das Array und bestimmen Sie zunächst, ob die Zeichenfolge eine Zahl ist.Wenn es sich um eine Zahl handelt, wird sie in eine Zahl umgewandelt und auf den Stapel gelegt. Andernfalls werden zwei Operanden herausgenommen, und derjenige nach „+“, „-“, „*“ oder „/“ wird nach dem herausgenommen Operator verwendet wird., was auf dem Stapel übrig bleibt, ist die endgültige Antwort
- 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;
- }
- }
-
Das war's für diesen Blog, vielen Dank an alle