程序的演绎法_程序

 

 

题意指:找到提供给你的数组中的能获得最大递增值的子序列

如题目中的数组,最大的序列为子序列{4,-1,2,1} 返回6

 

public class Max {
  //寻找数组中能组成最大和的子序列 (相邻)
  public static int sequence(int[] arr) {
    //如果数组大小为0 返回0
    if(arr.length == 0){
      return 0;
    }
    //声明临时最大值 与 最大返回值
    int maxTemp = 0;
    int maxRes = 0;
    //遍历数组 获取递加之和
    for(int i=0;i<arr.length;i++){
      //获取递加之和
      maxTemp += arr[i];
      //按照条件 递加之和小于0 则返回0
      if(maxTemp <0){
        maxTemp = 0;
      }
        //最大返回值等于 最大返回值现在是否大于或者等于临时最大递增之和呢?
        //如果判定true 则 返回maxRes最大返回值 , 否则返回临时最大递增值给maRes(用于return)
        maxRes = maxRes >= maxTemp? maxRes : maxTemp;
    }
    //返回结果
    return maxRes;
  }
}

 

最主要的判定在for循环中

根据数组演绎,每个数组中的值递加,如果小于0(为负数)则设定为0 在于最大返回值结果变量比较 小于它 则不计入

当计算结果中获取到的递加之和愈大 则maxRes 的变量值越大 再递加数组中后续的数值后,如果有较大结果可能则进行maxRes的改变 否则将不会变动