最大子序列和问题

    xiaoxiao2021-03-25  84

    int maxSubSum2_1(int a[], int n) { int maxSum = 0; for (int i = 0; i < n; i++) { int thisSum = 0; for (int j = i; j < n; j++) { thisSum += a[j]; if (maxSum < thisSum) maxSum = thisSum; } } return maxSum; } int maxSubSum2_2(int a[], int n) { int maxSum = 0; for (int i = 0; i < n; i++) { int thisSum = 0; //相对2_1,改变内存循环读取方式,设置了固定点,向前累加 for (int j = i; j >= 0; j--) { thisSum += a[j]; if (maxSum < thisSum) maxSum = thisSum; } } return maxSum; } int maxSubSum3_1(int a[], int n) { int maxSum = 0; for (int i = 0; i < n; i++) { //相对2新增对首个元素是负数的判断 if (a[i] <= 0) continue; int thisSum = 0; for (int j = i; j >= 0; j--) { thisSum += a[j]; if (maxSum < thisSum) maxSum = thisSum; } } return maxSum; } int maxSubSum3_2(int a[], int n) { int maxSum = 0; for (int i = 0; i < n; i++) { //相对2新增对首个元素是负数的判断 if (a[i] <= 0) continue; int thisSum = 0; for (int j = i; j >= 0; j--) { thisSum += a[j]; if (maxSum < thisSum) maxSum = thisSum; else if (thisSum < 0) thisSum = 0; //相对3_1新增对当前序列为负数的处理 } } return maxSum; } int maxSubSum3_3(int a[], int n) { int maxSum = 0; /* for (int i = 0; i < n; i++) { //相对2新增对首个元素是负数的判断 if (a[i] <= 0) continue; */ //有了对当前序列为负数的处理后此时外层循环失去作用 int thisSum = 0; for (int j = 0; j >= 0; j--) { thisSum += a[j]; if (maxSum < thisSum) maxSum = thisSum; else if (thisSum < 0) thisSum = 0; //相对3_1新增对当前序列为负数的处理 } //} return maxSum; } 没有1的原因是1是用三层循环,没有意义
    转载请注明原文地址: https://ju.6miu.com/read-17596.html

    最新回复(0)