Обмен технологиями

11 июля. Регистрация обучения, стек структур данных.

2024-07-12

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

Всем привет, цель этого блога - запись прохождения исследования во время летних каникул. Позже будет организована рубрика. Основная цель - завершить изучение структур данных во время летних каникул. опубликуйте несколько соответствующих блогов о реализации структур данных и несколько тестов для личного изучения и использования. Я также надеюсь, что вы меня очень поддержите. Пожалуйста, укажите на любые недостатки. Спасибо всем.

1. Ликоу 115, самый маленький стек

. - ЛитКод

Просто используйте массив для имитации стека, но здесь я пытаюсь избавить вас от неприятностей, а скорость работы не очень высока, и есть много возможностей для оптимизации.

  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. Треугольник Ян Хуэй

. - ЛитКод

Анализ: Чтобы использовать таблицу последовательностей, которую мы изучили ранее, мы используем таблицу последовательностей для решения этой проблемы. Обратите внимание, что таблица последовательностей используется для моделирования двумерного массива.Двумерный массив, моделируемый таблицей последовательностей, не может просто получить доступ к элементам через индексы.

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

В-третьих, нажмите 150, оцените обратное польское выражение

Примечание. Польское выражение — это выражение, которое могут понять компьютеры.

. - ЛитКод

Идея: обойти массив, сначала определить, является ли строка числом,Если это число, оно преобразуется в число и помещается в стек. В противном случае удаляются два операнда, а после «+», «-», «*» или «/». используется оператор., то, что осталось в стеке, является окончательным ответом

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

На этом блог закончился, всем спасибо