乐趣区

关于java:29-顺时针打印矩阵30-包含min函数的栈31-栈的压入弹出序列Deque的详细方法

29. 顺时针打印矩阵

思路:https://www.bilibili.com/vide…


代码

    public int[] spiralOrder(int[][] matrix) {
        int row = matrix.length;
        if (row==0){int[] ints = new int[row];
            return ints;
        }
        int col = matrix[0].length;
        int[] mat = new int[row*col];
        boolean b = false;
        int count =0;
        int r1 = 0;
        int r2 = row;
        int c1 = 0;
        int c2 = col;
        
        while(count!=row*col){for (int i = c1; i < c2; i++) {mat[count++] = matrix[r1][i];
                if(count==row*col) {
                    b = true;
                    break;
                }
            }
            if (b == true) break;
            for (int i = r1+1; i < r2; i++) {mat[count++] = matrix[i][c2-1];
                if(count==row*col) {
                    b = true;
                    break;
                }
            }
            if (b == true) break;
            for (int i = c2-2; i >= c1; i--) {mat[count++] = matrix[r2-1][i];
                if(count==row*col) {
                    b = true;
                    break;
                }
            }
            if (b == true) break;
            for (int i = r2-2; i >= r1+1; i--) {mat[count++] = matrix[i][c1];
                if(count==row*col) {
                    b = true;
                    break;
                }
            }
            if (b == true) break;
            r1++;
            r2--;
            c1++;
            c2--;
        }
        return mat;
    }

30. 蕴含 min 函数的栈

思路:辅助栈中始终放以后最小元素,

,https://www.bilibili.com/vide…

代码

重点:

也能够:

class MinStack {
    Deque<Integer> A;
    Deque<Integer> B;
    public MinStack() {A = new LinkedList<>();
        B = new LinkedList<>();}
    public void push(int x) {if (A.isEmpty()){A.push(x);
            B.push(x);
            return;
        }
        if (x<B.peek()){A.push(x);
            B.push(x);
            return;
        }
        A.push(x);
        B.push(B.peek());
    }

    public void pop() {A.pop();
        B.pop();}

    public int top() {return A.peek();
    }

    public int min() {return B.peek();
    }
}

Java Deque 接口 应用办法(栈、队列、双端队列)

31. 栈的压入、弹出序列

思路:https://www.bilibili.com/vide…

始终 push,while 有雷同的 pop 走,没有了又持续 push

    public boolean validateStackSequences(int[] pushed, int[] popped) {Deque<Integer> ss = new LinkedList<Integer>();
        if (pushed.length != popped.length) return false;
        int K = 0;
        for (int i = 0; i < pushed.length; i++) {ss.push(pushed[i]);
            while(!ss.isEmpty()&&ss.peek()==popped[K]){ss.pop();
                K++;
                if (K==pushed.length) return true;
            }
        }
        return ss.isEmpty();}
退出移动版