Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ASKED IN GOOGLE - https://www.lintcode.com/problem/903/
- Assume you have an array of length n initialized with all 0's and are given k update operations.
- Each operation is represented as a triplet: [startIndex, endIndex, inc] which increments each element of subarray A[startIndex ... endIndex] (startIndex and endIndex inclusive) with inc.
- Return the modified array after all k operations were executed.
- Example
- Given: length = 5,
- updates =
- [
- [1, 3, 2],
- [2, 4, 3],
- [0, 2, -2]
- ]
- return [-2, 0, 3, 5, 3]
- Explanation:
- Initial state:
- [ 0, 0, 0, 0, 0 ]
- After applying operation [1, 3, 2]:
- [ 0, 2, 2, 2, 0 ]
- After applying operation [2, 4, 3]:
- [ 0, 2, 5, 5, 3 ]
- After applying operation [0, 2, -2]:
- [-2, 0, 3, 5, 3 ]
- ---------------------------------------------------------------------------------------------------------------------------------------
- ITS CALLED THE "LINE SWEEP ALGORITHM"
- class Solution {
- public:
- vector<int> getModifiedArray(int n, vector<vector<int>> &updates) {
- vector<int> res(n,0);
- for(auto update: updates){
- int start=update[0];
- int end=update[1];
- int inc=update[2];
- res[start]+=inc;;
- if(end+1<n){
- res[end+1]-=inc;
- }
- }
- for(int i=1;i<n;i++){
- res[i]+=res[i-1];
- }
- return res;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment