Если вы действительно хотите самое быстрое решение со сложным временем для этого конкретного ответа, это постоянный поиск.
final int minBoundary = 10;
final int maxBoundary = 145;
final int maxSize = 6;
Vector<Integer> index = new Vector<Integer>(maxBoundary);
// run through once and set the values in your index
впоследствии
if( v > minBoundary )
{
size = (v > maxBoundary ) ? maxSize : index[v];
}
То, что мы здесь делаем, - это маркировка всех возможных результатов v в пределах диапазона и места их падения, и тогда нам нужно только проверить граничные условия.
Проблема в том, что он использует больше памяти и, конечно, если maxBoundary будет намного больше, это будет очень неэффективно в пространстве (а также потребует больше времени для инициализации).
Иногда это может быть лучшим решением для ситуации.