LeetCode-1749. Suma absoluta máxima de cualquier subarreglo [Suma absoluta máxima de cualquier subarreglo] [Medio] -Análisis y código [Java]
1. Tema
Le da una matriz de números enteros. El valor absoluto de la suma de una submatriz [numsl, numsl + 1,…, numsr-1, numsr] es abs (numsl + numsl + 1 +… + numsr-1 + numsr).
Busque cualquier submatriz (puede estar vacía) con el mayor valor absoluto de nums y devuelva el valor máximo.
abs (x) se define de la siguiente manera:
- Si x es un número entero negativo, entonces abs (x) = -x.
- Si x es un número entero no negativo, entonces abs (x) = x.
Ejemplo 1:
输入:nums = [1,-3,2,3,-4]
输出:5
解释:子数组 [2,3] 和的绝对值最大,为 abs(2+3) = abs(5) = 5 。
Ejemplo 2:
输入:nums = [2,-5,1,-4,3,-2]
输出:8
解释:子数组 [-5,1,-4] 和的绝对值最大,为 abs(-5+1-4) = abs(-8) = 8 。
inmediato:
- 1 <= núm. De longitud <= 10 ^ 5
- -10 ^ 4 <= números [i] <= 10 ^ 4
Fuente: LeetCode (LeetCode)
Enlace: https://leetcode-cn.com/problems/maximum-absolute-sum-of-any-subarray Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.
Dos, análisis y código
1. Solución de clasificación
(1) Pensando
Debido a que el valor absoluto más grande puede ser el número positivo más grande o el número negativo más pequeño, para evitar varios juicios durante el proceso de recorrido directo, se puede dividir directamente en dos casos: buscar el número positivo más grande y el número negativo más pequeño del Luego, genere el valor absoluto máximo de los dos.
(2) Código
class Solution {
public int maxAbsoluteSum(int[] nums) {
int sumMax = 0, sum = 0, len = nums.length;
//正数最大
for (int i = 0; i < len; i++) {
if (sum + nums[i] > 0) {
sum += nums[i];
sumMax = Math.max(sum, sumMax);
} else
sum = 0;
}
//负数最大
sum = 0;
for (int i = 0; i < len; i++) {
if (sum - nums[i] > 0) {
sum -= nums[i];
sumMax = Math.max(sum, sumMax);
} else
sum = 0;
}
return sumMax;
}
}
(3) Resultados
Tiempo de ejecución: 3 ms, superando al 97,82% de los usuarios
en todas las presentaciones de Java ; consumo de memoria: 47,2 MB, superando al 54,25% de los usuarios en todas las presentaciones de Java.
Tres, otro
Nada.