import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param energy int整型一维数组
* @return int整型
*/
public int maxEnergyCircular (int[] energy) {
// write code here
int total = 0;
int max_energy = Integer.MIN_VALUE;
for(int i=0;i<energy.length;i++){
total+=energy[i];
}
max_energy = Math.max(max_energy,total);
int[] left_arr = new int[energy.length];
int[] right_arr = new int[energy.length];
left_arr[0] = Math.min(energy[0],0);
right_arr[0] = Math.max(energy[0],0);
for(int i=1;i<energy.length;i++){
left_arr[i] = Math.min(left_arr[i-1],0)+energy[i];
right_arr[i] = Math.max(right_arr[i-1],0)+energy[i];
max_energy = Math.max(max_energy,right_arr[i]);
max_energy = Math.max(max_energy,total-left_arr[i]);
}
if(max_energy==0){
Arrays.sort(energy);
return energy[energy.length-1];
}
return max_energy;
}
}
本题考察的知识点是动态规划,所用编程语言是java。
我定义了两个数组,一个数组是存储当前位置连续子群的能量值最大,另一个位置是存储当前位置连续子群的能量值最小,我们比较将总和减去当前位置连续子群能量值和当前位置连续子群的最大能量值,最后得出答案。
注意特例全是负数的情况下,结果是最大的负整数

京公网安备 11010502036488号