【微软谷歌面试100题--【45】一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值

第45题

一个整数数组,长度为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

既然是各份的和相等,首先让我们想到的是,先对这个数组求和,然后去求解一个分组的个数问题。

然后 定义变量 i=length(数组长度),i>0,i--,去寻找满足的最大的 i

import java.util.ArrayList;
import java.util.List;
public class Algorithm45_0 {
	static int getMax(int a[]){
		int sum=0;
		List myList=new ArrayList();
		for(int aa:a){
			sum+=aa;
			myList.add(aa);
		}
		for(int i=a.length;i>0;i--){
			if(sum%i==0){
				if(ifExsits(myList,sum/i,sum/i)){
					return i;
				}
			}
		}
		return 1;
	}
	
	static boolean ifExsits(List rootList,int num,int orgNum){
		if(rootList.size()==0&&num==orgNum){
			return true;
		}
		boolean flag=false;
		for(int i=0;i subList=new ArrayList();
			for(int j=0;j

你可能感兴趣的:(笔试)