题目
1.5503. 所有奇数长度子数组的和
2.5505. 所有排列中的最大和
思路与算法
- 第一题暴力就行了,看了很多大神的dp代码,太菜不太想懂,第一题暴力就好
- 第二题学了新名词差分数组,这玩意之前见过,没想到写出来的代码叫做差分数组。再深度研究一下比较好。
代码实现
1.5503. 所有奇数长度子数组的和
class Solution {
public int sumOddLengthSubarrays(int[] arr) {
int res = 0;
int len = arr.length;
for (int i = 1; i <= len; i += 2) {
for (int j = 0; j + i <= len; j++) {
for (int k = j;k < j + i; k++) {
res += arr[k];
}
}
}
return res;
}
}
2.5505. 所有排列中的最大和
class Solution {
public int maxSumRangeQuery(int[] nums, int[][] requests) {
int p = (int)1e9 + 7;
int n = nums.length;
long ans = 0;
int[] diff = new int[n + 1];
Arrays.sort(nums);
for (int i = 0; i < requests.length; i++) {
diff[requests[i][0]]++;
diff[requests[i][1] + 1]--;
}
for (int i = 0; i < n; i++) {
diff[i + 1] += diff[i];
}
Arrays.sort(diff);
for (int i = n; i >= 1 && diff[i] > 0; i--) {
ans += (long) (diff[i] * nums[i - 1]);
ans %= p;
}
return (int)ans;
}
}
写在最后
我的博客是记录用的,不求哪位来恶心喷老子,老子爱写就写,不写你也管不着。