Leetcode 3355 Zero Array Transformation

题意:给定一个长度为 n的int数组以及一个2D array, 有一个query数组,每个数组里的数[Li, Ri]代表这个区间的子集区间的数都减1,求这个数组在经过这个query数组之后能否变成全部为0的数组

https://leetcode.com/problems/zero-array-transformation-i/description/

题解:用差分数组可以解决,计算经过这么多个query之后如果数组中所有的值都小于等于0,返回true

差分数组:长度和原数组保持一定

example: [8, 2, 3, 5]

查分: [8, -6, 1, 2]

如何还原:[8, 8+(-6), 8+(-6)+1, 8+(-6)+1 + 2]

差分数组求前缀和就是原答案,注意nums[0]特殊对待

cpp 复制代码
class Solution {
public:
    bool isZeroArray(vector<int>& nums, vector<vector<int>>& queries) {
        int n = nums.size();
        vector<int> sub(n, 0);
        vector<int> arr(n, 0);
        for(int i = 0; i < n; i++) {
            if(!i) {
                sub[i] = nums[0];
            } else {
                sub[i] = nums[i] - nums[i-1];
            }
        }
        
        
        for(auto query: queries) {
            sub[query[0]] -= 1;
            if(query[1]+1 < n) {
                sub[query[1] + 1] += 1;
            }
        }
        for(int i = 0; i < n; i++) {
            if(!i) {
                arr[i] = sub[0];
            } else {
                arr[i] = arr[i-1] + sub[i];
            }
            if ( arr[i] > 0 ) {
                return false;
            }
        }
        return true;
    }
};
相关推荐
MediaTea4 分钟前
AI 术语通俗词典:C4.5 算法
人工智能·算法
Navigator_Z14 分钟前
LeetCode //C - 1033. Moving Stones Until Consecutive
c语言·算法·leetcode
WBluuue16 分钟前
数据结构与算法:莫队(一):普通莫队与带修莫队
c++·算法
风筝在晴天搁浅1 小时前
n个六面的骰子,扔一次之后和为k的概率是多少?
算法
MATLAB代码顾问2 小时前
Python实现蜂群算法优化TSP问题
开发语言·python·算法
代码飞天2 小时前
机器学习算法和函数整理——助力快速查阅
人工智能·算法·机器学习
jiushiapwojdap2 小时前
LU分解法求解线性方程组Matlab实现
数据结构·其他·算法·matlab
笨笨饿3 小时前
69_如何给自己手搓一个串口
linux·c语言·网络·单片机·嵌入式硬件·算法·个人开发
纽扣6673 小时前
【算法进阶之路】链表进阶:删除、合并、回文与排序全解析
数据结构·算法·链表
消失的旧时光-19434 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法