LL está de muy buen humor hoy, porque compró una baraja de cartas y descubrió que en realidad hay 2 reyes y 2 pequeños reyes en ella (la baraja de cartas era originalmente de 54) ... Sacó al azar 5 cartas de ella y quería probarlo. Sintiéndose afortunado, ver si puede sacar una escalera, si puede dibujar, decide comprar una lotería deportiva, ¡jeje! ! "Heart Ace, 3 of Spades, Little King, Big King, Square Piece 5", "¡Oh, Dios mío!" No es una recta ... LL no está contento, pensó en ello y decidió que Big \ Little King puede ser considerado como cualquier número, y A se considera como 1, J es 11, Q es 12 y K es 13. Las 5 cartas anteriores se pueden convertir en "1,2,3,4,5" (los reyes grandes y pequeños se consideran 2 y 4 respectivamente), "¡Qué suerte!". LL decidió comprar una lotería deportiva. Ahora, se le pide que use esta tarjeta para simular el proceso anterior y luego nos diga qué tan afortunado es LL. Si la tarjeta puede formar una recta, saldrá verdadera, de lo contrario, saldrá falsa. Para mayor comodidad, puede considerar que el tamaño king es 0.
Considere dos situaciones:
-
numbers
El caso que no contiene 0:
Entonces, ¿cómo juzgar? Debido a que la necesidad es una recta, en primer lugar不能有重复值
, si no hay un valor repetido, entonces la forma es como[1 2 3 4 5]
[5 6 7 8 9]
, encontrarás最大值与最小值的差值应该小于5
. -
numbers
El caso donde 0 está contenido en: Se
encuentra que el valor después de 0 se elimina, el método de juicio es el mismo que el de 1.
Idea: Primero ordene y luego registre la posición del último 0, porque 0 representa el tamaño del rey, puede actuar como cualquier número y luego atravesar desde el número más pequeño excepto 0. Si hay los mismos números, entonces debe ser falso. Si se atraviesa Después de eso, descubrí que no existe el mismo número excepto 0, y finalmente juzgo si la diferencia entre el valor máximo y el valor mínimo distinto de 0 es menor que 5
import java.util.Arrays;
public class Solution {
public boolean isContinuous(int[] numbers) {
int len = numbers.length;
if(len == 0 || numbers == null) return false;
Arrays.sort(numbers);
int i = 0;
for(int j = 0; j < len; j++){
if(numbers[j] == 0) {
i++; // i记录最小值的下标
continue;
}
if(j+1 < len && numbers[j] == numbers[j+1]){
return false;
}
}
return numbers[len-1] - numbers[i] < 5;
}
}
Complejidad temporal: O (NlogN)
Complejidad espacial: O (1)