算法导论--第四章--练习4.1-5
2014-05-24 16:19
183 查看
题目:使用如下思想为最大子数组问题设计一个非递归的、线性时间的算法、从数组的左边界开始,右左至右处理,记录最大子数组
public class Find_Max_SubArray {
public static void main(String[] args) {
int A[] = { -12, 12, 12, -2, 12, -120, 120 , 123 ,-1230 };
Find_Max_SubArray(A);
}
public static void Find_Max_SubArray(int A[]) {
// 记录相加的和
int sum = 0;
// 记录最大值
int max = 0;
// 记录最大子数组左下标
int indexLeft = 0;
// 记录最大子数组右下标
int indexRight = 0;
// 用来标记tempsum是否重新初始化
int mark = 0;
// 用来记录左下标加了多少次
int tempSum = 0;
for (int i = 0; i < A.length; i++) {
sum += A[i];
// 如果sum<0,说明A[i,j]这段已经没有继续加的必要,
if (sum < 0) {
// 重新初始化sum
sum = 0;
// mark=1,让tempsum重新计数
mark = 1;
} else {
if (sum > max) {
// 将最新的最大值赋予max
max = sum;
// 记录数组右下标
indexRight = i;
// 判断tempsum是否需要重新计数
if (mark == 1) {
tempSum = -1;
mark = 0;
}
tempSum++;
}
}
}
// 算出数组做下标
indexLeft = indexRight - tempSum;
System.out.print("最大子数组和为" + max + ",下标[" + indexLeft + ","
+ indexRight + "]");
}
}
------------------------------------------------------------------------------------------------苦难不是博得同情的资本,唯有不断奋斗才能改变命运!
public class Find_Max_SubArray {
public static void main(String[] args) {
int A[] = { -12, 12, 12, -2, 12, -120, 120 , 123 ,-1230 };
Find_Max_SubArray(A);
}
public static void Find_Max_SubArray(int A[]) {
// 记录相加的和
int sum = 0;
// 记录最大值
int max = 0;
// 记录最大子数组左下标
int indexLeft = 0;
// 记录最大子数组右下标
int indexRight = 0;
// 用来标记tempsum是否重新初始化
int mark = 0;
// 用来记录左下标加了多少次
int tempSum = 0;
for (int i = 0; i < A.length; i++) {
sum += A[i];
// 如果sum<0,说明A[i,j]这段已经没有继续加的必要,
if (sum < 0) {
// 重新初始化sum
sum = 0;
// mark=1,让tempsum重新计数
mark = 1;
} else {
if (sum > max) {
// 将最新的最大值赋予max
max = sum;
// 记录数组右下标
indexRight = i;
// 判断tempsum是否需要重新计数
if (mark == 1) {
tempSum = -1;
mark = 0;
}
tempSum++;
}
}
}
// 算出数组做下标
indexLeft = indexRight - tempSum;
System.out.print("最大子数组和为" + max + ",下标[" + indexLeft + ","
+ indexRight + "]");
}
}
------------------------------------------------------------------------------------------------苦难不是博得同情的资本,唯有不断奋斗才能改变命运!
相关文章推荐
- 《算法导论》第四章-第2节_练习(参考答案)
- 《算法导论》第四章-第1节_练习(参考答案)
- 算法导论第四章递归式4.1代换法4.2递归树
- 《算法导论》第四章-第4节_练习(参考答案)
- 《算法导论》第四章-第5节_练习(参考答案)
- 《算法导论》第四章-第3节_练习(参考答案)
- 《算法导论》第四章-第6节_练习(参考答案)
- 第四章 4.5节练习
- 《算法导论》第六章----优先级队列(代码实现+部分练习)
- 算法导论第三版4.1最大和子数组思考
- 第四章 4.1 准备工作 Prepare for Indexing
- Java编程思想第四版 第四章个人练习
- [第二周]第四章课后练习
- Python第三/第四章练习
- 算法导论第三版第四章 最大子数组和的三种解法(暴力、教材分治法、线性解法)
- 《Java实战开发经典》第四章4.1
- 练习4.1
- 《Python核心编程》第四章练习解析
- 算法导论 练习 2.3-2