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);
}