Compartilhamento de tecnologia

11 de julho, check-in de aprendizagem, pilha de estrutura de dados

2024-07-12

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

Olá a todos, o objetivo deste blog é registrar o check-in do estudo durante as férias de verão. Será organizado em uma coluna posteriormente. poste alguns blogs relacionados sobre implementação de estrutura de dados e alguns questionários para estudo e uso pessoal. Obrigado a todos.

1. Likou 115, a menor pilha

.-LeetCode

Basta usar um array para simular uma pilha, mas aqui estou tentando evitar problemas e a velocidade de execução não é muito alta e há muito espaço para otimização.

  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álise: Para usar a tabela de sequência que aprendemos anteriormente, usamos a tabela de sequência para resolver este problema. Observe que.O array bidimensional simulado pela tabela de sequência não pode simplesmente acessar elementos por meio de subscritos.

  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. }

Três, pressione 150, avalie a expressão polonesa reversa

Nota: A expressão polaca é uma expressão que pode ser entendida por computadores

.-LeetCode

Idéia: percorra a matriz, primeiro determine se a string é um número,Se for um número, ele é convertido em um número e colocado na pilha. Caso contrário, dois operandos são retirados e aquele após "+", "-", "*" ou "/" é retirado após o. operador é usado., o que resta na pilha é a resposta 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. }

É isso por este blog, obrigado a todos