算法题


2、 求最大子数组之和, 及数组开始、结束位置
   
        int[] arr = {1,3,-5,-1,12,-3,10};
        
        int tmp=0,sum=0;
        int start=0, end=0;
        
        for(int i=0; i<arr.length; i++){
            if(tmp<0){
                tmp = arr[i];
                start = i;
            }else{
                tmp += arr[i];
            }
            
            if(sum<tmp){
                sum = tmp;
                end = i;
            }else{
                end = i-1;
            }
        }
        
        System.out.print("最大子数组  :  ");
        for(int i=start; i<=end; i++){
            System.out.print(arr[i]+",");
        }
       
        System.out.println("sum == " + sum);
        


/**

* 求一个数组中出现次数最多且值最大的数

* */

public void theMaxCountAndMaxNumber(int[] arr){

Arrays.sort(arr);//先排序

//maxCount是重复出现最多次数, max是重复出现最多次数里的最大值

int maxCount=1, count = 1, tmp = 0, max=0;

for (int i = 0; i < arr.length; i++) {

//i==0,tmp初始值为0,所以需要判断一下

if(i==0){

if(tmp==arr[0] && arr[0]==0)

count = 0;

}

//因为之前已经排序过

if(tmp == arr[i]){

count++;

}else{

tmp = arr[i];

count = 1;

}

//得到最多重复次数,最多重复次数次获取最大值

if(maxCount<=count){

maxCount = count;

max = (max>arr[i])?max:arr[i];

}

}

System.out.println("maxCount == "+maxCount+" ,max == "+max);

}


  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值