τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Γεια σε όλους, ο σκοπός αυτού του ιστολογίου είναι να καταγράψει το check-in της μελέτης κατά τη διάρκεια των καλοκαιρινών διακοπών. Θα οργανωθεί αργότερα σε μια στήλη δημοσιεύστε μερικά σχετικά ιστολόγια σχετικά με την υλοποίηση της δομής δεδομένων και μερικά κουίζ για προσωπική μελέτη και χρήση. Ελπίζω επίσης να με υποστηρίξετε πολύ.
Απλώς χρησιμοποιήστε έναν πίνακα για να προσομοιώσετε μια στοίβα, αλλά εδώ προσπαθώ να εξοικονομήσω προβλήματα και η ταχύτητα λειτουργίας δεν είναι πολύ υψηλή και υπάρχει πολύς χώρος για βελτιστοποίηση.
- 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();
- */
Ανάλυση: Για να χρησιμοποιήσουμε τον πίνακα ακολουθιών που μάθαμε νωρίτερα, χρησιμοποιούμε τον πίνακα ακολουθιών για να λύσουμε αυτό το πρόβλημαΟ δισδιάστατος πίνακας που προσομοιώνεται από τον πίνακα ακολουθιών δεν μπορεί απλώς να έχει πρόσβαση σε στοιχεία μέσω δείκτες.
-
- 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;
- }
- }
-
Σημείωση: Η πολωνική έκφραση είναι μια έκφραση που μπορεί να γίνει κατανοητή από υπολογιστές
Ιδέα: Διασχίστε τον πίνακα, προσδιορίστε πρώτα αν η συμβολοσειρά είναι αριθμός,Εάν είναι αριθμός, μετατρέπεται σε αριθμό και ωθείται στη στοίβα, διαφορετικά αφαιρούνται δύο τελεστές και ο ένας μετά το "+", "-", "*" ή "/" αφαιρείται μετά το. χρησιμοποιείται χειριστής., αυτό που μένει στη στοίβα είναι η τελική απάντηση
- 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;
- }
- }
-
Αυτό είναι για αυτό το blog, σας ευχαριστώ όλους