一次面试中遇到这样一道题:每个int型的数组都有n个字集。如{1,-1,3}的子数组有{1},{3},{-1},{1,-1},{1,3},{-1,3},{1,-1,3}这些子数组中和最大的是4,要求写一方法求出一个int 型数组的所有子集中最大的和;
当时没答出来,在网上google了一下,有很各种各样的答案,自己也写了一个(试了一下还可以),就是不清楚它的不足之处,请各位高手给于指正:
public static int intSum(int[] m){
int sum=0;
ArrayList list=new ArrayList();
//把所有的负数加入到一个list中草药,如果该数组全是负数,则m.length==list.size()。只找到最大的那个就可以了。
for(int i=0;i<m.length;i++){
if(m[i]<0){
list.add(m[i]);
}
}
if(list.size()==m.length){
for (int i = 1; i < m.length; i++) {
sum=m[0];
if(m[i]>sum){
sum=m[i];
}
}
}else{
for (int i = 0; i < m.length; i++) {
if(m[i]>0){
sum+=m[i];
}
}
}
return sum;
}
当时没答出来,在网上google了一下,有很各种各样的答案,自己也写了一个(试了一下还可以),就是不清楚它的不足之处,请各位高手给于指正:
public static int intSum(int[] m){
int sum=0;
ArrayList list=new ArrayList();
//把所有的负数加入到一个list中草药,如果该数组全是负数,则m.length==list.size()。只找到最大的那个就可以了。
for(int i=0;i<m.length;i++){
if(m[i]<0){
list.add(m[i]);
}
}
if(list.size()==m.length){
for (int i = 1; i < m.length; i++) {
sum=m[0];
if(m[i]>sum){
sum=m[i];
}
}
}else{
for (int i = 0; i < m.length; i++) {
if(m[i]>0){
sum+=m[i];
}
}
}
return sum;
}
解决方案 »
- java.awt编写的软键盘,如何实现软键盘的输入显示到jsp的txt中
- Runtime.getRuntime().exec()方法
- 各位好 我今天第一次配置nutch 遇到一个错误
- 求教skip的用法
- 请教各位老师,有没有使用resin2.1.6+struts的老师呀,帮忙显示一个web.xml的内容我的出错
- 应如何选择学习java和.net
- 中国人的J2EE应用服务器:金蝶Apusic应用服务器V4.0今日发布
- 通过网络传递对象数组的问题。。
- 有关native调用的问题
- 又一个新手上路!java 将无处不在!??
- 为什么没有Java专用的CPU?
- 在JAVA中,如何使用本地用户登录SQL SERVER 2000
for(int i=0;i<a.length;i++){
if(a[i]>0){
sum+=a[i];
}else if(a[i]>max){
max=a[i];
}
}
if(sum==0&&max<0) sum=max;sum就是你求的数。
那样的话只要从原数组中找到非负数,存入ArrayList中,这样不就可以了吗