Range Addition & LCS
Last updated
Last updated
public class Solution {
public int[] getModifiedArray(int length, int[][] updates) {
if(length <= 0) return new int[0];
int[] rst = new int[length];
for(int[] update : updates){
int start = update[0];
int end = update[1];
int val = update[2];
rst[start] += val;
if(end + 1 < length) rst[end + 1] -= val;
}
int carry = 0;
for(int i = 0; i < length; i++){
rst[i] += carry;
carry = rst[i];
}
return rst;
}
} public int longestConsecutive(int[] nums) {
if(nums == null || nums.length == 0) return 0;
HashMap<Integer, Integer> map = new HashMap<>();
int maxLen = 0;
for(int i = 0; i < nums.length; i++){
int num = nums[i];
if(map.containsKey(num)) continue;
int leftBound = map.containsKey(num - 1) ? map.get(num - 1): 0;
int rightBound = map.containsKey(num + 1) ? map.get(num + 1): 0;
int sum = leftBound + rightBound + 1;
map.put(num, sum);
maxLen = Math.max(sum, maxLen);
if(leftBound != 0) map.put(num - leftBound, sum);
if(rightBound != 0) map.put(num + rightBound, sum);
}
return maxLen;
}