Java 查找arraylist的和但不包括最大元素
我目前没有任何代码,但我需要返回arraylist的和,但不包括最大的元素,例如,3,4,5,10,我必须找到3+4+5的和,它=12。 我不知道如何编写代码,使其忽略最大的元素。 我目前有:Java 查找arraylist的和但不包括最大元素,java,arrays,arraylist,sum,Java,Arrays,Arraylist,Sum,我目前没有任何代码,但我需要返回arraylist的和,但不包括最大的元素,例如,3,4,5,10,我必须找到3+4+5的和,它=12。 我不知道如何编写代码,使其忽略最大的元素。 我目前有: int sum = 0; for(int i = 0; i < array.length; i++) sum = sum + array[i]; return sum; int和=0; for(int i=0;i10k),这也非常有用,因为它提供了开箱即用的多线程功能。试试这个 import
int sum = 0;
for(int i = 0; i < array.length; i++)
sum = sum + array[i];
return sum;
int和=0;
for(int i=0;i
我将此问题视为两个问题的简单组合:
- 一个接一个地求和元素,跟踪到目前为止的最高值
- 完成后,将最高值减去总金额
List<Integer> values = List.of(3, 4, 5, 10);
int sum = 0;
for (int value : values) {
sum += value;
}
int max = Collections.max(values);
sum -= max;
如果您有一个非常大的数据列表(>10k),这也非常有用,因为它提供了开箱即用的多线程功能。试试这个
import java.util.Arrays;
public class Sum {
public static void main(String[] args)
{
// TODO Auto-generated method stub
//arr size>1
int arr[] = {3,5,4};
int res[] = getSumAndMax(arr);
int sum=0;
Arrays.sort(arr);
for(int i=0;i<arr.length-1;i++)
{
sum+=arr[i];
}
System.out.println("sum="+sum+" :max="+arr[arr.length-1]);
System.out.println("sum="+res[0]+" :max="+res[1]);
}
public static int[] getSumAndMax(int[] arr)
{
int sum=0;
int max=arr[0];
for(int i=0;i<arr.length;i++)
{
sum+=arr[i];
max = Math.max(max, arr[i]);
}
int out[] = {sum-max, max};
return out;
}
}
- 将sum和max设置为第一个值
- 然后迭代并计算sum,然后找到max
- 然后返回总和减去最大值
迭代所有元素,求和,同时检查最大值。迭代后从总和中减去max。首先需要找到最大的元素。有多种方法,其中一种是对列表进行升序排序。只需求和到最后,但最后一个(最后一个是最大的)…谢谢你的帮助,但当我说数组时。排序(数组),它说找不到任何名为“array”的东西?必须先导入类,默认情况下在
java.lang
中不是这样的<代码>导入java.util.array代码>非常感谢您的帮助,显然我不需要对数组进行排序,我只需要按照您所说的执行长度-1。我喜欢这个网站:),如果它没有排序,你会得到正确的答案,如果你有幸在最后一个位置上有max
。(排序强制在最后一个位置上有max)也要注意排序是很耗时的,所以即使你得到了正确的答案,也许在最后通过计算总和和扣除来计算max会更快…显然在流的情况下,“高效”更注重代码的简洁性,而不是高效的代码。@trilogy在“一次迭代中的所有内容”的意义上是高效的。
List<Integer> values = List.of(3, 4, 5, 10);
IntSummaryStatistics stats = values.stream()
.mapToInt(Integer::intValue)
.summaryStatistics();
int sum = stats.getSum() - stats.getMax();
import java.util.Arrays;
public class Sum {
public static void main(String[] args)
{
// TODO Auto-generated method stub
//arr size>1
int arr[] = {3,5,4};
int res[] = getSumAndMax(arr);
int sum=0;
Arrays.sort(arr);
for(int i=0;i<arr.length-1;i++)
{
sum+=arr[i];
}
System.out.println("sum="+sum+" :max="+arr[arr.length-1]);
System.out.println("sum="+res[0]+" :max="+res[1]);
}
public static int[] getSumAndMax(int[] arr)
{
int sum=0;
int max=arr[0];
for(int i=0;i<arr.length;i++)
{
sum+=arr[i];
max = Math.max(max, arr[i]);
}
int out[] = {sum-max, max};
return out;
}
}
sum=7 :max=5
public static int findSum(int[] array) {
if (array == null || array.length <2){
return 0;
}
int max = array[0];
int sum = max;
for (int i = 1; i < array.length; i++) {
int v = array[i];
sum = sum + v;
if (v > max) {
max = v;
}
}
return sum - max;
}
public static int findSumStream(int[] array) {
return array == null || array.length < 2 ? 0 : Arrays
.stream(array)
.map(i -> ~i)
.sorted()
.map(i->~i)
.skip(1)
.sum();
}