题目描述:
给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。
示例:
解题思路:
对数组排序–》求整个数组和和余数–》若为0,直接输出结果;若为1,在数组余数为1中,减去第一个或数组余数为2中,减去前两个;若为2,在数组余数为2中,减去第一个或数组余数为1中,减去前两个。若余数不够,返回0.
代码附上:
class Solution {
public int maxSumDivThree(int[] nums) {
int n=nums.length,sum=0,x1=0,x2=0,x=0;
if(n==1) {
if((nums[0]%3)==0) return nums[0];
else return 0;
}
int[] a1=new int[n];
int[] a2=new int[n];
Arrays.sort(nums);
for(int i=0;i<n;i++) {
sum+=nums[i];
if((nums[i]%3)==1) {
a1[x1]=nums[i];
x1++;
} else if((nums[i]%3)==2) {
a2[x2]=nums[i];
x2++;
}
}
x=sum%3;
if(x==0) return sum;
else if(x==1) {
if(a1[0]!=0) {
if(a2[1]!=0) {
sum=sum-a1[0]>sum-a2[0]-a2[1]?sum-a1[0]:sum-a2[0]-a2[1];
} else {
sum=sum-a1[0];
}
} else {
if(a2[1]!=0) {
sum=sum-a2[0]-a2[1];
} else {
sum=0;
}
}
}
else {
if(a2[0]!=0) {
if(a1[1]!=0) {
sum=sum-a2[0]>sum-a1[0]-a1[1]?sum-a2[0]:sum-a1[0]-a1[1];
} else {
sum=sum-a2[0];
}
} else {
if(a1[1]!=0) {
sum=sum-a1[0]-a1[1];
} else {
sum=0;
}
}
}
return sum;
}
}