Compartir tecnología

Registro de aprendizaje del 11 de julio, pila de estructura de datos

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Hola a todos, el propósito de este blog es registrar el registro del estudio durante las vacaciones de verano. Más adelante se organizará en una columna. La intención principal es completar el estudio de las estructuras de datos durante las vacaciones de verano. Publique algunos blogs relacionados sobre la implementación de la estructura de datos y algunos cuestionarios para estudio y uso personal. También espero que puedan apoyarme mucho. Señalen cualquier deficiencia.

1. Likou 115, la pila más pequeña

- LeetCode

Simplemente use una matriz para simular una pila, pero aquí estoy tratando de evitar problemas y la velocidad de ejecución no es muy alta y hay mucho espacio para la optimización.

  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. */

2. Triángulo Yang Hui

- LeetCode

Análisis: para utilizar la tabla de secuencia que aprendimos anteriormente, usamos la tabla de secuencia para resolver este problema. Utilice la tabla de secuencia para simular una matriz bidimensional.La matriz bidimensional simulada por la tabla de secuencia no puede simplemente acceder a elementos a través de subíndices.

  1. class Solution {
  2. public List<List<Integer>> generate(int numRows) {
  3. List<List<Integer>> ret=new ArrayList<>();
  4. List<Integer> list=new ArrayList<>();
  5. list.add(1);
  6. ret.add(list);
  7. for(int i=1;i<numRows;i++){
  8. List<Integer> row=new ArrayList<>();
  9. row.add(1);
  10. List<Integer> 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. }

Tres, presione 150, evalúe la expresión polaca inversa.

Nota: La expresión polaca es una expresión que las computadoras pueden entender.

- LeetCode

Idea: recorrer la matriz, primero determinar si la cadena es un número,Si es un número, se convierte en un número y se coloca en la pila. De lo contrario, se eliminan dos operandos y el que está después de "+", "-", "*" o "/" se elimina después del. Se utiliza el operador., lo que queda en la pila es la respuesta final

  1. class Solution {
  2. public int evalRPN(String[] tokens) {
  3. Stack<Integer> 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. }

Eso es todo por este blog, gracias a todos.