每日三题-最大矩形、比特位计数、回文子串

简介: 每日三题-最大矩形、比特位计数、回文子串

最大矩形


8cd082d59e954d87a7dd0704d7f68263.png

class Solution {
    public int maximalRectangle(char[][] mat) {
        int n = mat.length, m = mat[0].length, ans = 0;
        int[][] sum = new int[n + 10][m + 10];
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                sum[i][j] = mat[i - 1][j - 1] == '0' ? 0 : sum[i - 1][j] + 1;
            }
        }
        int[] l = new int[m + 10], r = new int[m + 10];
        for (int i = 1; i <= n; i++) {
            int[] cur = sum[i];
            Arrays.fill(l, 0); Arrays.fill(r, m + 1);
            Deque<Integer> d = new ArrayDeque<>();
            for (int j = 1; j <= m; j++) {
                while (!d.isEmpty() && cur[d.peekLast()] > cur[j]) r[d.pollLast()] = j;
                d.addLast(j);
            }
            d.clear();
            for (int j = m; j >= 1; j--) {
                while (!d.isEmpty() && cur[d.peekLast()] > cur[j]) l[d.pollLast()] = j;
                d.addLast(j);
            }
            for (int j = 1; j <= m; j++) ans = Math.max(ans, cur[j] * (r[j] - l[j] - 1));
        }
        return ans;
    }
}


比特位计数



586d1163a191427285520cba8d08dbe2.png

解法一

奇偶

class Solution {
    public int[] countBits(int n) {
        int dp[] = new int[n+1];
        for(int i = 1;i <=n;i++){
            if(i% 2 == 0){
                dp[i] = dp[i/2];
            }else{
                dp[i] = dp[i-1]+1;
            }
        }
        return dp;
    }
}


回文子串


6a27c09afaee490aae265f877c9c5bbf.png

class Solution {
    public int countSubstrings(String s) {
        int n = s.length();
        boolean dp[][] = new boolean[n][n];
        int res = 0;
        for(int i = 0;i<n;i++){
            for(int j = 0;j <=i;j++){
                if(s.charAt(i) == s.charAt(j) && (i-j < 2 || dp[j+1][i-1])){
                    dp[j][i] = true;
                    res++;
                }
            }
        }
        return res;
    }
}
相关文章
|
7月前
|
机器人
【Leetcode -657.机器人能否返回原点 -674.最长连续递增序列】
【Leetcode -657.机器人能否返回原点 -674.最长连续递增序列】
20 0
|
3天前
|
算法 测试技术 C#
【二进制求公约数】【数学】【数论】2543. 判断一个点是否可以到达
【二进制求公约数】【数学】【数论】2543. 判断一个点是否可以到达
|
3天前
|
人工智能 算法
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
|
3天前
|
算法 测试技术 C++
【数位dp】【C++算法】600. 不含连续1的非负整数
【数位dp】【C++算法】600. 不含连续1的非负整数
|
3天前
|
机器学习/深度学习
【剑指offer】-和为S的连续正数序列-39/67
【剑指offer】-和为S的连续正数序列-39/67
|
6月前
|
算法
算法:数字涂色
算法:数字涂色
|
9月前
|
存储 人工智能 算法
【前缀和】截断数组、K倍区间、激光炸弹
现在,要将该数组从中间截断,得到三个非空子数组。
53 0
|
11月前
剑指offer 64. 和为S的连续正数序列
剑指offer 64. 和为S的连续正数序列
45 0
|
11月前
Leecode 面试题57 - II. 和为s的连续正数序列
Leecode 面试题57 - II. 和为s的连续正数序列
38 0
每日三题-旋转图像、合并区间、除自身以外数组的乘积
每日三题-旋转图像、合并区间、除自身以外数组的乘积
49 0
每日三题-旋转图像、合并区间、除自身以外数组的乘积