기술나눔

7월 11일 학습 체크인, 데이터 구조 스택

2024-07-12

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

안녕하세요 여러분, 이번 블로그는 여름방학 동안의 학습체크를 기록하는 것이 목적이며, 추후에 칼럼으로 정리하여 여름방학 동안 자료구조에 대한 학습을 ​​마치도록 하겠습니다. 데이터 구조 구현에 대한 관련 블로그를 게시하고 개인 학습 및 활용을 위해 부족한 점을 지적해 주시기 바랍니다.

1. Likou 115, 가장 작은 스택

. - LeetCode

단순히 배열을 사용하여 스택을 시뮬레이션하지만 여기서는 문제를 해결하려고 노력하고 있으며 실행 속도가 그다지 높지 않으며 최적화할 여지가 많습니다.

  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. 양희삼각형

. - LeetCode

분석: 앞서 배운 시퀀스 테이블을 사용하기 위해 시퀀스 테이블을 사용하여 2차원 배열을 시뮬레이션합니다.시퀀스 테이블에 의해 시뮬레이션된 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을 누르고 역 폴란드어 표현을 평가해 보세요

참고: 폴란드어 표현은 컴퓨터가 이해할 수 있는 표현입니다.

. - LeetCode

아이디어: 배열을 탐색하고 먼저 문자열이 숫자인지 확인합니다.숫자이면 숫자로 변환되어 스택에 푸시됩니다. 그렇지 않으면 두 개의 피연산자를 제거하고 "+", "-", "*" 또는 "/" 다음의 피연산자를 제거합니다. 연산자가 사용됩니다., 스택에 남은 것이 최종 답입니다

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

이 블로그는 여기까지입니다. 모두 감사합니다