Vou ficar desempregado Dia 1 Oferta da Dedo da Espada 4. Encontre em uma matriz bidimensional

Afetada pela epidemia, ela pode ser apenas um lar. A atmosfera sem laboratório se transformou completamente em um peixe salgado e os papéis pequenos não foram devolvidos ao professor. Hoje comecei a registrar o processo de escovar a oferta de espada e dedo.
Os tópicos são: 4. Procure
uma matriz bidimensional Em uma matriz bidimensional n * m, cada linha é classificada em ordem crescente da esquerda para a direita e cada coluna é classificada em ordem crescente de cima para baixo. Por favor, complete uma função, insira uma matriz bidimensional e um número inteiro e determine se a matriz contém o número inteiro.
Exemplo: A
matriz existente é a seguinte:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
Dado o objetivo = 5, retorne verdadeiro.
Dado alvo = 20, retorne falso.

O código é o seguinte:

class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        bool a = false;
        if (matrix.size() == 0)
        {return false;}
        int rows = matrix.size();
        int cols = matrix[0].size();
        
        
        int row = 0;
        int col = cols-1;
        while(row<rows && col>=0)
        {
            if (matrix[row][col] == target)
            {a = true;
            break;}
            else if (matrix[row][col] > target)
            col--;
            else row++;
        }
        
        return a;
           
    }
};

A idéia é comparar o número de destino com o elemento no canto superior direito da matriz em um loop e retornar true diretamente se forem iguais. Existem dois casos de desigualdade: (1) O elemento no canto superior direito é maior que o alvo, indicando que toda essa coluna é maior que o alvo. Para excluir esta coluna, (2) O elemento no canto superior direito é menor que o destino, significa que uma linha inteira de elementos é menor que o destino, exclua esta linha; a maneira de excluir é alcançada pela linha ++ e col–, em vez de realmente operar na matriz, desde que aumentando Ou reduza as variáveis ​​que controlam o loop, você pode ignorar o item que deseja excluir, apenas não acessá-lo. Se a exclusão estiver concluída ou não, retorne false.
O mais problemático é o caso de uma matriz vazia.O ponteiro é usado para a oferta de ponteiro, por isso é bom julgar se a matriz é nullptr, mas aqui está a matriz e ela não pode reconhecer nula, basta olhar para o método na resposta de dedução de força. 0 retorna false, mas ainda existe um problema, defino um valor booleano a, se o array vazio for a = false, mas a compilação não pode passar, sou louco! ! ! Alguém pode me dizer por que?
Em seguida, é necessário adicionar pontos de conhecimento:
matrix.size () é o número de linhas na matriz bidimensional, matrix [0] .size () é o número de colunas.
Então está aqui para "excluir" as linhas e colunas alterando as variáveis ​​que controlam o loop, excluindo as linhas ou colunas que precisam ser excluídas do corpo do loop e excluindo-as disfarçadas, mas o método no canto superior direito desta pergunta é normal Quem pode fazer isso ...
Continue com o fígado depois da soneca!

Publicado 3 artigos originais · gostei 0 · visitas 16

Acho que você gosta

Origin blog.csdn.net/qq_41227231/article/details/105658581
Recomendado
Clasificación