算法小知识----11.10----范围求和II

208 阅读3分钟

这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

范围求和II

该题出自力扣的598题——范围求和II,自己做的题解

审题

给定一个初始元素全部为 0,大小为 m*n 的矩阵 M 以及在 M 上的一系列更新操作。

操作用二维数组表示,其中的每个操作用一个含有两个正整数 a 和 b 的数组表示,含义是将所有符合 0 <= i < a 以及 0 <= j < b 的元素 Mi 的值都增加 1。

在执行给定的一系列操作后,你需要返回矩阵中含有最大整数的元素个数

  • 简单概括就是,给一个M * N 的矩阵,有一个二维数组,二维数组内的0位和1位,决定了矩阵的范围+1

  • 思路:

    • 不要拘泥于暴力的做法,+1只是个幌子
    • 矩阵内,每次遍历二维数组都是一个范围——长 * 宽
    • 在这个基础上,只需要找出最短的长,和最短的宽即可
    • 有意思的是,不要用最小面积去作为对比,会导致部分结果的长款用例更小,结果错误

编码

  • 需要校验数组条件,如果数组条件为空,则直接返回m * n 的矩阵
    public int maxCount(int m, int n, int[][] ops) {
        if (ops.length == 0){
            return m* n;
        }
        int mina =  m ;
        int minb = n;
        for (int[] a:ops){
            mina = Math.min(a[0],mina);
            minb= Math.min(a[1],minb);
        }
        return mina * minb;
    }

猜数字游戏

该题出自力扣的299题——猜数字游戏(中等题),消化于官方题解

审题

你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:

写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:

猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls", 公牛), 有多少位属于数字猜对了但是位置不对(称为 "Cows", 奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。 给你一个秘密数字 secret 和朋友猜测的数字 guess ,请你返回对朋友这次猜测的提示。

提示的格式为 "xAyB" ,x 是公牛个数, y 是奶牛个数,A 表示公牛,B 表示奶牛。

请注意秘密数字和朋友猜测的数字都可能含有重复数字。

  • 简单概括就是,给出两个字符串(数字),找出两个数,一个是位置一样+数字一样,一个是位置不一样
  • 第一个完全一致的数很简单,遍历即可获得
  • 主要是第二个,数字一样,位置不一致,需要用两个数组存储相应的出现次数
  • 再遍历,获得最少出现的即可

编码

    public String getHint(String secret, String guess) {
        int a = 0;
        int b = 0;
        int[] cow1 = new int[10];
        int[] cow2 = new int[10];
        for (int i = 0;i<secret.length();i++){
            if (secret.charAt(i) == guess.charAt(i)){
                a++;
            }else {
                ++cow1[secret.charAt(i) - '0'];
                ++cow2[guess.charAt(i) - '0'];
            }
        }
        for (int i = 0;i<10;++i){
            b += Math.min(cow1[i],cow2[i]);
        }
        StringBuilder sb = new StringBuilder();
        sb.append(a);
        sb.append("A");
        sb.append(b);
        sb.append("B");
        return sb.toString();
    }

1636357072(1).jpg