Sword se refiere al "Poker Straight" de la serie Offer

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:

  1. numbersEl 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.

  2. numbersEl 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)

Supongo que te gusta

Origin blog.csdn.net/weixin_44471490/article/details/108943705
Recomendado
Clasificación