
주어진 점수 배열과 query배열이 주어지는데, queries[i] = [li, ri]는 다음을 뜻한다.
1. nums의 [li, ri] 범위에서 subset을 선택.
2. 선택한 인덱스의 값들을 -1 감소
3. 모든 query를 순차적으로 실행하고 nums의 모든 요소가 0이면 true, 아니면 false를 반환.
제약사항
1 <= nums.length <= 10^5
backtracking풀이는 불가능하다.부분 집합을 선택하는 것이기에, 음수인 것은 0이 되도록 선택을 안한다는 가정을 하면 성립. (양수는 절대로 성립할 수 없다.)class Solution {
public:
bool isZeroArray(vector<int>& nums, vector<vector<int>>& queries) {
int dp[100001] = {0, };
for(auto vec: queries){
int l = vec[0];
int r = vec[1];
dp[l]--;
dp[r+1]++;
}
for(int i = 1; i<nums.size(); i++){
dp[i] += dp[i-1];
}
for(int i = 0 ; i<nums.size(); i++){
if(nums[i] + dp[i] > 0){
return false;
}
}
return true;
}
};