求最大值 java_Java-求最大值问题[比较有挑战]

我觉得解题的关键条件是: 任意两个j%i(求余)为偶数(i,j,i

我从这句话得到的信息是,每一组数都是同奇偶性的数(全偶数、全奇数)!

所以我的思路是,将N长度的无重复数的数组拆分为两个集合!判断两个集合中数字和较大的一组则为正解!

以下是我的java代码,若有不合理的欢迎纠正!

public class Test09 {

/**

* @param args

*/

public static void main( String args[] ) {

int nums[] = { 2 , 6 , 8 , 12 , 56 , 9 , 32 , 47 , 5 , 16 }; // 例子 有n个无重复数的数组

int len = nums.length;

List< Integer > oddList = new ArrayList< Integer >();

List< Integer > evenList = new ArrayList< Integer >();

for ( int i = 0 ; i < len ; i++ ) { // 将n个数按奇偶性查分

if ( isEven( nums[ i ] ) ) {

evenList.add( nums[ i ] ); // 偶数聚集地

} else {

oddList.add( nums[ i ] ); // 奇数聚集地

}

}

List< Integer > bigList = isBig( group( oddList , len ) , group( evenList , len ) );

System.out.println( bigList );

}

/**

* 获取两个集合中总和较大的一组

*

* @param oddList

* @param evenList

* @return

*/

public static List< Integer > isBig( List< Integer > oddList , List< Integer > evenList ) {

return sum( oddList ) > sum( evenList ) ? oddList : evenList;

}

/**

* 得到有效集合

*

* @param list

* @param len

* @return

*/

public static List< Integer > group( List< Integer > list , int len ) {

if ( list.size() < len / 2 ) { // 集合的个数必须为 < n/2

return list;

} else {

Collections.sort( list );

int size = list.size();

// 当集合长度大于 n/2 时删除集合中较小的

for ( int i = size - len / 2 ; i > 0 ; i-- ) {

list.remove( i - 1 );

}

return list;

}

}

private static int sum( List< Integer > list ) {

int count = 0;

for ( Integer integer : list ) {

count += integer;

}

return count;

}

// 判断一个数是否为偶数

private static boolean isEven( int x ) {

return ( x & 1 ) == 0;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值