1、题目描述
给定一个整数n表示1-n个员工,然后给定m个区间[l,r],对区间内每一个员工工资加1,问m个区间升值之后,每个员工的薪资。
2、示例
输入:
3 2
1 3
2 3
输出:
1 2 2
3、题解
基本思想:区间+前缀和,对于[l,r]区间,那么nums[l]+=1,nums[r+1]-=1;这样最后对nums每一个求前缀和的时候[l,r]区间都加1了,而r之后的元素不变。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution{
public:
vector<int> promotion(int n,vector<vector<int>>& nums)
{
//基本思想:区间+前缀和
vector<int> res(n,0);
for(int i=0;i<nums.size();i++)
{
res[nums[i][0]-1]++;
if(nums[i][1]!=n)
res[nums[i][1]-1]--;
}
for(int i=1;i<n;i++)
res[i]+=res[i-1];
return res;
}
};
int main()
{
Solution solute;
int n=3;
vector<vector<int>> nums{{2,3},{1,3}};
vector<int> res=solute.promotion(n,nums);
for_each(res.begin(),res.end(),[](int v){cout<<v<<endl;});
return 0;
}