Demostrar la oferta de seguridad: preguntas cara NO.3-NO.6

He oído que gana famosos de la oferta, el blanco puede haber sucedido leetcode de la prostitución, en la manera de cepillarse un cepillo.
Pero para probar la seguridad de la oferta leetcode son preguntas sencillas, no conocen el libro original anterior no es tan difícil? O hasta que la búsqueda Ir trabajo real comprar un par de.
Sin más, el siguiente tercero a sexto título a ser un resumen:

La tercera pregunta: ¿los números duplicados de matriz

Aquí Insertar imagen Descripción
Esta pregunta no es difícil de decir verdad, la gente podría simplemente el aprendizaje de programación, habrá un día o dos ideas.
Aquí hay alrededor de dos ideas:

1, un diccionario (hash), a través de cada elemento, si no aparece en el diccionario, es en el diccionario una clave nueva. Si hay (no se han explicado antes de este elemento) en el diccionario, a continuación, volver directamente. (Este método se omitirá ya que nada discute)

2, tenga en cuenta el título de " Todos los números están en el rango de 0 ~ n-1 ", podemos pensar:Cada elemento debe ponerlo en la posición
En el ejemplo de la figura 1 por encima de la castaña.:

  • Los primeros puntero apunta a un número 2, va a ser una matriz en la posición 2 elementos (en este caso la posición del elemento 2 no es 2) intercambio 1: [1, 3, 2, 0, 2, 5, 3]
  • Puntero al segundo número 3, será una matriz en la posición 3 elementos (en este caso el elemento 3 no es una posición 3) 0 Invertida: [1, 0, 2, 3, 2, 5, 3]
  • Puntero a la tercera número 2, la caja 2 se coloca en el desempeño de su posición .
  • Puntero a la cuarta dígitos 3, caso 3 se coloca en su posición de la descarga
  • Puntero a la quinta dígitos 2, pero: En este caso la posición 2 tiene elementos 2 , el elemento 2 puede ser repetido se determina, y devuelve el elemento 2.

Código es el siguiente:

class Solution:
    def findRepeatNumber(self, nums: List[int]) -> int:
        for i in range(len(nums)):
            while nums[i] != i:
                if nums[i] == nums[nums[i]]:
                    return nums[i]
                nums[nums[i]] , nums[i] = nums[i] , nums[nums[i]]
        return None

Hay un punto a destacar es que la penúltima línea de la cruz a la cesión
antes de que no se dio cuenta, escribió:

nums[i], nums[nums[i]] = nums[nums[i]], nums[i]

Por último error, por lo que?
Después de la búsqueda, he encontrado que para la cruz-asignación: a, b = b, un
proceso es: primero un punto b representa un objeto y, a continuación b punto para el objeto un representante (un representante de los objetos aquí se refiere a la de un representante original de objeto)

Por lo tanto, en la fórmula anterior, los nums [nums [i]] (en el lado izquierdo de la proceso de b en el tiempo) se calcula, los nums [I] ( un proceso de tratamiento ) se ha modificado.

.

Cuarta Pregunta: dos dimensiones matriz de búsqueda

Aquí Insertar imagen Descripción
Este problema fue uno de los que va a hacer, pero todavía necesitan un poco de truco título.
Esta pregunta es la condición más importante: "la columna en el incremento, incrementar la línea"
Por lo tanto, además de los dos para el ciclo de la violencia de encontrar, hay una manera sencilla.

  • Bottom conjunto de elementos de observación izquierdo, que se compara con la diana
  • Si el objetivo es mayor que el elemento, el elemento no puede tener una columna en la que el objetivo (debido a que las columnas son más pequeños que el elemento). Por lo tanto, nuestro siguiente paso sólo en la columna de la derecha de la n * (m-1) para encontrar la matriz
  • Si el objetivo es menor que el elemento, el elemento no puede tener un objetivo situado en la línea (como el elemento de línea es mayor que el promedio). Por lo tanto, sólo se usó en la siguiente n-1 * m matriz para encontrar la parte superior de la columna
  • Si el objetivo es igual al elemento, devuelve True

Así que adelante, si no se encuentra, se devuelve Falso.

class Solution:
    def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
        i, j = len(matrix)-1, 0
        while i >= 0 and j <= len(matrix[0])-1:
            if target > matrix[i][j]:
                j += 1
            elif target < matrix[i][j]:
                i -= 1
            else:
                return True
        return False

.

La quinta pregunta: sustituir los espacios

Aquí Insertar imagen Descripción
Este problema ... no tiene nada que decir.
Se cosa notable, cadena de Python no puede ser modificado!
Antes, yo estaba pensando a través de cada elemento, si se encuentra con un espacio, se modifica el elemento es "20%".
Por supuesto, inevitablemente fallido, está haciendo caso omiso de la cadena no se puede modificar

Después de eso, yo estaba pensando: Si los espacios atravesados, re-construir una cadena:

s = s[:i] + "%20" + s[i+1:]

Esto funciona, pero cada vez que el espacio tendrá que volver a construir una cadena . Los gastos son demasiado altos.
Así, aprobado por medio de una lista de almacenamiento, y finalmente unirse devuelve el método:

class Solution:
    def replaceSpace(self, s: str) -> str:
        res = []
        for c in s:
            if c == ' ': res.append("%20")
            else: res.append(c)
        return "".join(res)

.

Pregunta 6: imprimir la lista desde la cola hasta la cabeza

Aquí Insertar imagen Descripción
Este problema sólo se tenga en cuenta el método inverso devuelve un iterador, necesidad a la lista de uso () para crear instancias de ella.

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reversePrint(self, head: ListNode) -> List[int]:
        s = []
        while head:
            s.append(head.val)
            head = head.next
        return list(reversed(s))
Publicado 22 artículos originales · ganado elogios 2 · Vistas 1935

Supongo que te gusta

Origin blog.csdn.net/weixin_43901558/article/details/104882657
Recomendado
Clasificación