没怎么写过Java,贴出自己写的代码供大伙批斗。
- /*
- 思路:
- 数字串存在数组中;
- 扫描所有子串,每扫描一条子串计算它的和,记录和最大的子串;
- 打印出来;
- 疑问:
- 以上思路比较暴力无脑,不知道有没有什么巧妙的解法,望指教。
- */
- public class Demo {
- static int[] testArray = {1,-3,5,-2,6};
-
- // 计算子串的和
- static int sum(int begin, int end)
- {
- int sum = 0;
- for(int i=begin; i<end; i++) {
- sum += testArray[i];
- }
- return sum;
- }
-
- // 打印子串
- static void printer(int begin, int end)
- {
- for(int i=begin; i<end; i++) {
- System.out.print(testArray[i] + " ");
- }
- }
-
- static void test()
- { // 记录子串的最大值、及其位置,含头不含尾
- int max = testArray[0], begin = 0, end = 1;
- // 开始扫描,共扫描length轮,第i轮扫描长度为i的子串
- for (int i=1; i<=testArray.length; i++) {
- // 扫描所有长度为i的子串
- for (int j=0,k=i; k<=testArray.length; j++,k++) {
- int tmp = sum(j, k);
- if (max < tmp) {
- max = tmp;
- begin = j;
- end = k;
- }
- }
- }
- System.out.println("sum = " + max);
- printer(begin, end);
- }
-
-
- public static void main(String[] args) {
- // TODO code application logic here
- test();
- }
- }
复制代码 |