力扣---2020.5.8

221. 最大正方形

class Solution {
    public int maximalSquare(char[][] matrix) {
        int m = matrix.length;
        if(m<1){
            return 0;
        }
        int n = matrix[0].length;
        
        //正方形的边长
        int brim = 0;
        int[][] dp = new int[m+1][n+1];
        //dp[i][j]  表示以第i行第j列为正方形右下角所能构成的最大正方形边长
        for(int i = 1;i<=m;i++){
            for(int j = 1;j<=n;j++){
                if(matrix[i-1][j-1]=='1'){
                    dp[i][j] = Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1]) + 1;
                    brim = Math.max(brim,dp[i][j]);
                }
            }
        }
        return brim*brim;
    }
}

面试题31. 栈的压入、弹出序列

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        Stack<Integer> stack = new Stack<>();
        int i = 0;
        for(int num:pushed){
            stack.push(num);
            //当栈不为空,并且`栈顶元素 == 弹出序列的当前元素`时,弹出栈顶元素,并将弹出序列的指针向后移动一位
            while(!stack.isEmpty()&&stack.peek()==popped[i]){
                stack.pop();
                i++;
            }
        }
        return stack.isEmpty();
    }
}

你知道的越多,你不知道的越多。

你可能感兴趣的:(数据结构与算法)