查找数组中的最大值但必须低于某个值

时间:2016-09-15 13:06:00

标签: java

int array[] = new int[]{10, 11, 88, 2, 12, 9};

public static int getMax(int[] inputArray){ 
  int maxValue = inputArray[0];

  for(int i=1;i < inputArray.length;i++){ 
     if(inputArray[i] > maxValue){ 
        maxValue = inputArray[i]; 
     } 
  } 
  return maxValue; 
}

有没有办法在阵列中找到最大值但低于88?

3 个答案:

答案 0 :(得分:5)

如果您使用Integer,则可以使用TreeSet

进行操作
Integer[] values = new Integer[]{10, 11, 88, 2, 12, 9};
NavigableSet<Integer> integers = new TreeSet<>(Arrays.asList(values));

System.out.println(integers.lower(88));
System.out.println(integers.lower(2));
System.out.println(integers.lower(100));

打印出来

12
null
88

NavigableSet.lower(E e)的javadoc说:

  

返回此set中最大的元素,严格小于给定元素,如果没有这样的元素,则返回null。

答案 1 :(得分:1)

如果您使用Java8,则可以使用this question

int[] array = new int[]{10, 11, 88, 2, 12, 9};
final int limit = 88;
Optional<Integer> max = Arrays.stream(array).filter(i -> i < limit)
    .boxed().max(Comparator.naturalOrder());

System.out.println("Biggest element smaller than " + limit + " is " + max.get());

输出:

Biggest element smaller than 88 is 12 

它执行以下操作:

  • int数组转换为流
  • 从流中删除大于或等于指定限制(.filter
  • 的元素
  • 将流转换为Integer流(.boxed
  • 使用自然顺序比较器(.max
  • 计算最大值

流的关键部分是filter,其中大于限制的元素将从流中删除。

答案 2 :(得分:0)

你可能正在寻找这样的东西:

public static int getMax(final int[] inputArray) {

    final int L = 88;

    int maxValue = inputArray[0];

    for (int i = 1; i < inputArray.length; i++) {
        if (maxValue < L)
            break;
        maxValue = inputArray[i];
    }

    for (final int element : inputArray) {
        if (element >= L)
            continue;
        if (element > maxValue)
            maxValue = element;
    }
    return maxValue;
}

请注意inputArray[0] >= 88

时,(部分)其他答案会失败