public class MaxSubArray {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数组元素,以逗号分隔:");
String s = scanner.nextLine();
String[] split = s.split(",");
int[] nums = new int[split.length];
for (int i = 0; i < split.length; i++) {
nums[i] = Integer.parseInt(split[i]);
}
int result = maxSum(nums);
System.out.println("最大子序列和:"+result);
}
private static int maxSum(int[] nums) {
int[] dp = new int[nums.length];
Map<Integer,Integer> map1 = new HashMap();
Map<Integer,Integer> map2 = new HashMap();
dp[0] = nums[0];
int max = nums[0];
map1.put(0,dp[0]);
for (int i = 1; i < nums.length; i++) {
if (dp[i-1]>0){
dp[i] = dp[i-1]+nums[i];
map1.put(i,nums[i]);
}else {
dp[i] = nums[i];
map1.clear();
map1.put(i,nums[i]);
}
if (dp[i]>max){
max = dp[i];
map2.clear();
for (Map.Entry<Integer, Integer> entry : map1.entrySet()) {
map2.put(entry.getKey(),entry.getValue());
}
}
}
for (Map.Entry<Integer, Integer> entry : map2.entrySet()) {
System.out.println("元素下标"+entry.getKey()+":"+entry.getValue());
}
return max;
}
}