2.一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1;
{3,6}{2,4,3} m=2
{3,3}{2,4}{6} m=3 所以m的最大值为3
package com.interview.algorithm;
public class LeverageSum {
/*
* 2、.一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1;
{3,6}{2,4,3} m=2
{3,3}{2,4}{6} m=3 所以m的最大值为3
*/
public int[] a;
public void getFactors(){
/*
* 优化排序后,拿到最大值
*/
int len = a.length;
int eachSum;
int sum = 0;
int[] res = new int[len];
int groupId = 1;
int index = 0;
for(int i=0; i < len; i++){
sum += a[i];
}
for(int m = 2; m <= len; m++){
if(sum%m != 0) continue;
eachSum = sum/m;
if(this.findFactorArray(eachSum, eachSum, m, res, groupId)){
for(int i = 0; i < res.length; i++){
System.out.print(res[i]+",");
}
System.out.println();
}
this.clearArray(res);
}
}
int returnVlaue;
public static int NonFound = 1;
public static int lessThanZero = 2;
public boolean findFactorArray(int eachSum, int groupSum, int m, int[] res, int groupId ){
if(groupSum < 0) return false;
if(groupSum == 0){
groupId ++;
groupSum = eachSum;
if(groupId == m+1){
return true;
}
}
for(int i = 0; i<a.length; i++){
if(res[i] != 0 ) continue;
res[i] = groupId;
if (this.findFactorArray(eachSum, groupSum - a[i], m, res, groupId))
return true;
res[i] = 0;
}
return false;
}
public void clearArray(int[] a){
for(int i = 0; i < a.length ; i++){
a[i] = 0;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] temp = {3,2,4,3,6};
LeverageSum leverage = new LeverageSum();
leverage.a = temp;
leverage.getFactors();
}
}