私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
みなさんこんにちは、このブログの目的は夏休み中の勉強チェックを記録することです 後々コラムにまとめる予定ですので、主な目的は夏休み中にデータ構造の勉強を終わらせることです。データ構造の実装に関するいくつかの関連ブログと、個人的な学習と使用のためのクイズも投稿します。欠点がある場合はご指摘ください。
配列を使用してスタックをシミュレートするだけですが、ここでは手間を省こうとしているため、実行速度はそれほど高くなく、最適化の余地がたくさんあります。
- 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();
- */
分析: 先ほど学習したシーケンス テーブルを使用してこの問題を解決します。シーケンス テーブルを使用して 2 次元配列をシミュレートすることに注意してください。シーケンス テーブルによってシミュレートされた 2 次元配列は、添え字を介して要素に単純にアクセスすることはできません。
-
- 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;
- }
- }
-
注:ポーランド語表現はコンピュータが理解できる表現です
アイデア: 配列を走査し、まず文字列が数値かどうかを判断し、数値の場合は、数値に変換されてスタックにプッシュされます。そうでない場合は、2 つのオペランドが取り出され、「+」、「-」、「*」または「/」の後のオペランドが取り出されます。演算子が使用されます。、スタックに残っているものが最終的な答えです
- 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;
- }
- }
-
今回のブログはここまでです、皆さんありがとうございました