返回一个整数数组中最大子数组的和3
2015-04-11 09:33
260 查看
要求:
• 输入一个整形数组,数组里有正数也有负数。
• 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
• 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
• 同时返回最大子数组的位置。 求所有子数组的和的最大值。要求时间复杂度为O(n)。
设计思路:核心算法同求一个最大子数组的和Ⅱ相同,将所有数组一遍循环改为无限循环,只需选一个时间跳出即可。
具体代码如下:
个人总结:在while循环的跳出时,需考虑周全。
• 输入一个整形数组,数组里有正数也有负数。
• 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
• 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
• 同时返回最大子数组的位置。 求所有子数组的和的最大值。要求时间复杂度为O(n)。
设计思路:核心算法同求一个最大子数组的和Ⅱ相同,将所有数组一遍循环改为无限循环,只需选一个时间跳出即可。
具体代码如下:
public static void main(String[] args){ int numberLength = 10; int a[] = new int[numberLength]; for(int i = 0;i < numberLength;i++){ a[i] = (int)(Math.random() * 20 - 10); // 产生的随机数范围在-9 ~ 9 } System.out.print("产生的随机数的值为:"); for(int i = 0;i < numberLength;i++){ System.out.print(a[i] + " "); } System.out.print("\n"); int sum = a[0],temp = 0,left = 0,right = 1,i = -1,r = -1; while(1!=0){ i++; r = i % numberLength; temp = temp + a[r]; if(temp < a[r]){ temp = a[r]; left = i; } if(temp >= sum){ sum = temp; right = i; } // 如果循环两圈以上,或者将所有的数全部加上,则跳出。 if(i/numberLength > 2 || Math.abs(i - left)== numberLength){ break; } } System.out.println("最大字数组的和为:" + sum); System.out.println("边界为:" + ((left%numberLength)+1) + " 到 " + ((right%numberLength)+1)); }
个人总结:在while循环的跳出时,需考虑周全。
相关文章推荐
- 3月17号周二课堂练习:结对开发----返回一个整数数组中最大子数组的和一
- 返回一个整数数组中最大子数组的和
- 3月24号周二课堂练习:结对开发----返回一个整数数组中最大子数组的和二
- 返回一个整数数组中最大子数组的和-课堂训练(子数组为连续)
- 返回一个整数数组中最大子数组的和
- 结对开发之《返回一个整数数组中最大子数组的和》
- 3月27号周五课堂练习:结对开发----返回一个整数数组中最大子数组的和三
- 返回一个整数数组最大子数组的和
- 题目:返回一个整数数组中最大子数组的和。(要求程序必须能处理1000 个元素)
- 返回一个整数数组(环形数组)中最大子数组的和
- 结对开发之返回一个整数数组中最大子数组的和
- 课堂练习之结对开发项目思想总结:返回一个整数数组中最大子数组的和
- 返回一个整数数组中最大子数组的和
- 返回一个整数数组中最大子数组的和
- 返回一个二维整数数组中最大子数组的和1
- 题目:给一个排序好的整数数组A,请写一个函数,输入是数组A和一个整数x,返回数组A中值小于x的最大元素的索引值
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
- 返回一个整数数组中最大子数组的和
- 返回一个整数数组中最大子数组的和
- 返回一个整数数组中最大子数组的和(升级版)