求最大连续子数组

还是朋友给的。。。哈哈,原题如下:

求最大的连续子数组,用数学的话来说,就是求最大的连续子集合,其实我们可以把它看成是一个数学问题,然后就变成了求一个函数的最小值到最大值之间的区间(最小值在最大值的左边),而这个函数为y=sum(x),然后就可以了

代码如下:

package com.zsl.operation;
/**
 * 
* 类名称:MaxInterval   
* 类描述:最大的子区间
* 创建人:张双亮   
* 创建时间:2018年11月11日 下午5:03:09   
* @version
 */
public class MaxInterval {

    public static void main(String[] args){
        int[] s = {1,-1,-12,22,33,23,-34,45,76,34,-34,56,-100};
        int[] t = getResultInterval(s);
        for(int i = 0; i < t.length; i++){
            if(i == (t.length - 1)){
                System.out.println(t[i]);
            }else{
                System.out.print(t[i]+",");
            }
            
        }
        int[] index = getMinOrMaxIndex(t);
        int[] p = getMaxInterval(s,index[0],index[1]);
        for(int i = 0; i < p.length; i++){
            if(i == (p.length - 1)){
                System.out.println(p[i]);
            }else{
                System.out.print(p[i]+",");
            }
            
        }
    }
    /**
     * 
     * 功能:计算数组中各阶段的总和 
     * 参数:@param params
     * 参数:@return
     * 作者:张双亮
     * 日期:2018年11月11日 下午5:12:54
     */
    private static int[] getResultInterval(int[] params){
        int[] result = new int[params.length];
        int sum = 0;
        for(int i = 0; i < params.length; i++){
            sum += params[i];
            result[i] = sum;
        }
        return result;
    }
    /**
     * 
     * 功能: 获取最大或者最小值索引
     * 参数:@param params 
     * 参数:@param type
     * 参数:@return
     * 作者:张双亮
     * 日期:2018年11月11日 下午5:20:50
     */
    private static int[] getMinOrMaxIndex(int[] params){
        int indexMax = 0;
        int indexMin = 0;
        int min = params[0];
        int max = params[0];
        for(int i = 1; i < params.length; i++){
            if(params[i] > max){
                max = params[i];
                indexMax = i;
            }
        }
        for(int i = 0; i < indexMax; i++){
            if(params[i] < min){
                min = params[i];
                indexMin = i;
            }
        }
        int[] index = {indexMin,indexMax};
        return index;
    }
    /**
     * 
     * 功能:根据索引获取相应的区间 
     * 参数:@param params
     * 参数:@param indexStart
     * 参数:@param indexEnd
     * 参数:@return
     * 作者:张双亮
     * 日期:2018年11月11日 下午5:29:19
     */
    private static int[] getMaxInterval(int[] params,int indexStart,int indexEnd){
        int[] result = new int[(indexEnd - indexStart + 1)];
        for(int i = indexStart; i <= indexEnd; i++){
            result[i - indexStart] = params[i];
        }
        return result;
    }
}
额  但愿能看懂吧。。。。。。。emmmmmmm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值