模拟+排序 超时,下为超时代码:
class Solution {
public int maxSumRangeQuery(int[] nums, int[][] requests) {
int[] map = new int[nums.length];
for (int i=0;i<requests.length;i++){
for (int j=requests[i][0];j<=requests[i][1];j++){
map[j]++;
}
}
Arrays.sort(nums);
Arrays.sort(map);
int res = 0;
int len = nums.length-1;
int mod = (int) (Math.pow(10,9)+7);
for (int i=map.length-1;i>=0&&map[i]!=0;i--){
res += nums[i]*map[i];
res %= mod;
}
return res;
}
}
后面看评论说模拟复杂度太高,可以用差分数组的思想优化,优化后用时24ms,通过:
class Solution {
public int maxSumRangeQuery(int[] nums, int[][] requests) {
int[] map = new int[nums.length+1];
for (int i=0;i<requests.length;i++){
map[requests[i][0]]++;
map[requests[i][1]+1]--;
}
for (int i=1;i<map.length;i++){
map[i] += map[i-1];
}
Arrays.sort(nums);
Arrays.sort(map);
int res = 0;
int len = nums.length-1;
int mod = (int) (Math.pow(10,9)+7);
for (int i=map.length-1;i>=0&&map[i]!=0;i--){
res += nums[i-1]*map[i];
res %= mod;
}
return res;
}
}