Demostrar la oferta de seguridad: 3-7 Registro

Encontrar un número de serie duplicados.


Todos los números en una matriz de nums longitud n de están en el rango de 0 ~ n-1. Algunos de matriz digital se duplica, pero no sabe cuántos números repetir, no sé cada número se repitió varias veces. Por favor, encontrar una gran variedad de cualquiera de los números duplicados.

Ejemplo 1:

Entrada:
[2, 3, 1, 0, 2, 5, 3]
de salida: 2 o 3 

Ideas: un registro se puede ajustar.

class Solution {
    public int findRepeatNumber(int[] nums) {
        Set<Integer> set = new HashSet<Integer>();
        for (int num : nums) {
            if (!set.add(num)) {
                return num;
            }
        }
        return -1;
    }
}

En una matriz de dos dimensiones de n * m, cada fila de izquierda a derecha en el orden de ascendente en orden, para ordenar cada columna, de arriba abajo en orden creciente. Una función completa, entran en una matriz tal de dos dimensiones y un número entero, se determina si la matriz contiene el número entero.

 

Ejemplo:

matriz existente multiplica como sigue:

[
  [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 target = 5, vuelve verdadera.

Dada target = 20, devuelve falso.

 

restricciones:

0 <= n <= 1000

0 <= m <= 1000

Ideas: de izquierda inferior o esquina superior derecha de la investigación, cada fila o pueden ser excluidas.

class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return false;
        }
        int len = matrix.length;
        int row = 0, column = matrix[0].length - 1;
        while (row < len && column >= 0) {
            int num = matrix[row][column];
            if (num == target) {
                return true;
            } else if (num > target) {
                column--;
            } else {
                row++;
            }
        }
        return false;
    }
}

Por favor implementar una función, reemplazar cada espacio de la cadena s de "20%".

 

Ejemplo 1:

Entrada: s = "Estamos felices. "
Output: "Hemos% 20are% 20happy. "

Ideas: De nuevo a cobertura frontal, no será cubierto el número de vacantes, cada letra asignada sólo una vez. (En caso contrario sustituir adelante hacia atrás para mantener en movimiento detrás del personaje)

class Solution {
    public String replaceSpace(String s) {
        int length = s.length();
        char[] array = new char[length * 3];
        int size = 0;
        for (int i = 0; i < length; i++) {
            char c = s.charAt(i);
            if (c == ' ') {
                array[size++] = '%';
                array[size++] = '2';
                array[size++] = '0';
            } else {
                array[size++] = c;
            }
            
        }
        String newStr = new String(array, 0, size);
        return newStr;
    }
}

Introduzca un cabeza de los nodos de la lista, cada nodo a su vez, el valor de retorno (Return una matriz) de la cola a la cabeza.

 

Ejemplo 1:

Entrada: cabeza = [1,3,2]
de salida: [2,3,1]
 

restricciones:

0 <= longitud de la cadena <= 10,000

Idea: poner la pila puede ser derramada.

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */

class Solution {
    public int[] reversePrint(ListNode head) {
        Stack<ListNode> stack = new Stack<ListNode>();
        while (head != null) {
            stack.push(head);
            head = head.next;
        }
        int size = stack.size();
        int[] arr = new int[size];
        for (int i = 0; i < size; i++) {
            arr[i] = stack.pop().val;
        }
        return arr;
    }
}

Y escriba el resultado en un orden previo de recorrido de un árbol binario en preorden recorrido del árbol binario reconstrucción. Resultados Supongamos que preorden de recorrido de orden y de entrada de números duplicados son libres.

 

Por ejemplo, dada

Preorden recorrido en preorden = [3,9,20,15,7]
preorden finde = [9,3,15,20,7]
devuelve el siguiente árbol binario:

    3
   / \
  9 20
    / \
   15 7
 

restricciones:

0 <= el número de nodos <= 5000

ideas:

1, el primer elemento de la primera secuencia es la raíz secuencia

2, con el fin de encontrar la posición de la raíz en la secuencia

3, el proceso anterior se repite.

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        int n = preorder.length;
        if (n == 0)
            return null;
        int rootVal = preorder[0], rootIndex = 0;
        for (int i = 0; i < n; i++) {
            if (inorder[i] == rootVal) {
                rootIndex = i;
                break;
            }
        }
        TreeNode root = new TreeNode(rootVal);
        root.left = buildTree(Arrays.copyOfRange(preorder, 1, 1 + rootIndex), Arrays.copyOfRange(inorder, 0, rootIndex));
        root.right = buildTree(Arrays.copyOfRange(preorder, 1 + rootIndex, n), Arrays.copyOfRange(inorder, rootIndex + 1, n));

        return root;
    }
}

 

Publicados 618 artículos originales · ganado elogios 10000 + · vistas 1,54 millones +

Supongo que te gusta

Origin blog.csdn.net/hebtu666/article/details/104742357
Recomendado
Clasificación