本篇博客的编程是关于数组的,数组在编程中有着举足轻重的地位,因为在Java中数组是直接存储在栈中的,所以操作起来很方便,效率非常高,数组也是面试中经常考察的一部分,关于数组的编程题目丰富多样,逻辑性很强,希望大家多加练习,提高自己解决问题的能力。
题目描述:在一维数组中,求出连续子数组的最大和。如果数组中全是整数,那么最大和为所有元素之和,那么存在负数呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。
题目要求: 时间限制:1秒 空间限制:32768K
解题思路:
1. 首先,我们需要定义一个变量currentSum,用for循环来记录前i项的和,currentSum每次都会更改,如果currentSum的值小于0,我们再往后加只有减小最大和,所以我们需要将array[i+1]项的值重新赋值给currentSum。
2. 我们需要定义一个最大值max,每次改变currentSum的值时,我们都需要将max和currentSum进行比较,如果currentSum大于max,我们则将currentSum的值赋值给max。
实现代码:
public class TestArray {
public static int FindGreatestSumOfSubArray(int[] array) {
if (array.length==0 || array==null) {
return 0;
}
int currentSum = 0; //存储当前连续n项的和
int max = 0; //存储连续子元素和的最大值
for (int i = 0; i < array.length; i++) {
//核心部分,好好理解.
if(currentSum<=0){ //如过当前连续n项的和小于等于0,则没必要与后面的元素相加
currentSum = array[i]; //currentSum重新赋值
}else{
currentSum += array[i]; //如果currentSum的值大于0,则继续与后面的元素相加,
}
if(currentSum>max){ //每次改变currentSum的值都有与max进行比较
max = currentSum; //如果currentSum的值大于max,则将currentSum的值赋值给max
}
}
return max;
}
}
代码测试:
public static void main(String[] args) {
int[] array = {6,-3,-2,7,-15,1,2,2};
int result = FindGreatestSumOfSubArray(array);
System.out.println("连续子元素的最大和为:"+result);
}
连续子元素的最大和为:8
这道编程题能不错的考察程序员的能力,如果能够编写出来,说明编程能力还是不错的,编程能力能够通过练习得到提高的,希望再接再厉!