[M前缀和] lc3096. 得到更多分数的最少关卡数目(前缀和+思维)

1. 题目来源

链接:3096. 得到更多分数的最少关卡数目

2. 题目解析

比较有意思的题目,仔细读题后发现解题没啥难度,但是如何写好、写的更简洁需要注意下:

思路:

  • 数据量 1e5,肯定不能两层循环了。那就需要在每个数组下标查询时,都需要知道 A、B 的得分。
  • 得分:0 扣分,1 加分。当查询下标 i 时,i 下标从 0 开始,先暂定 i+1 这段都能得分,那么现在只需要得到我的扣分项即可算出最终得分。即只需要统计下标 i 位置之前的所有的 0 的个数作为扣分项,i + 1 这个数组长度就是我的得分,但这里是包含了 0 的这些扣分的,这些位置的得分是无效的,所以需要减去 2 倍的 0 的个数,即减去无效得分、减去真是扣分,即算出来最终的得分情况。
  • 前后缀均可这样计算。

坑点:

  • bob 必须要操作,所以 i < n-1。这里还 WA 一次… 没看到题目说明…

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1)

class Solution {
public:
    int minimumLevels(vector<int>& possible) {
        int n = possible.size();
        possible[0] = possible[0] == 0;
        for (int i = 1; i < n; i ++ ) {
            if (possible[i] == 0) possible[i] = 1;
            else possible[i] = 0;

            possible[i] += possible[i - 1];
        }

        for (int i = 0; i < n - 1; i ++ ) {
            if (i + 1 - 2 * possible[i] > n - i - 1 - 2 * (possible[n - 1] - possible[i])) {
                return i + 1;
            }
        }

        return -1;
    }
};

相关推荐

  1. 区域检索-数组不可变(Lc303)——前缀

    2024-07-19 11:26:03       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 11:26:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 11:26:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 11:26:03       58 阅读
  4. Python语言-面向对象

    2024-07-19 11:26:03       69 阅读

热门阅读

  1. SpringBoot3.x项目中忽略SSL证书错误

    2024-07-19 11:26:03       20 阅读
  2. cmake configure_package_config_file指令详解

    2024-07-19 11:26:03       18 阅读
  3. 决策树算法介绍:原理与案例实现

    2024-07-19 11:26:03       20 阅读
  4. sklearn基础教程

    2024-07-19 11:26:03       18 阅读
  5. codeforces round 941div2(a,b,c)

    2024-07-19 11:26:03       21 阅读
  6. C++中传递指针和传递引用应用场合的区别

    2024-07-19 11:26:03       15 阅读