[Las 101 entrevistas imprescindibles de Niuke] Día8.BM87 Fusione dos matrices ordenadas y BM88 para determinar si es una cadena palíndromo

Sobre el autor: Hola a todos, mi nombre es Weiyang;

Página de inicio del blog: Weiyang.303

Serie de columnas: TOP101 imprescindibles para las entrevistas de Niuke

Cita del día: Sólo hay una oportunidad en la vida de una persona de marcar la diferencia, ¡y es ahora! ! ! ! !

Directorio de artículos

Prefacio

1. Fusionar dos matrices ordenadas

Descripción de la pregunta

Análisis de resolución de problemas.

2. Determinar si es una cuerda palíndromo.

Descripción de la pregunta

Análisis de resolución de problemas.

Resumir



Prefacio

1. Fusionar dos matrices ordenadas

Descripción de la pregunta

describir:

Dada una matriz de enteros ordenados A y una matriz de enteros ordenada B, combine la matriz B con la matriz A para convertirse en una matriz ordenada en orden ascendente;


Rango de datos: 0≤n,m≤100,∣Ai​∣<=100,∣Bi​∣<=100;


Nota:
1. Asegúrese de que la matriz A tenga suficiente espacio para almacenar los elementos de la matriz B. Los números iniciales de elementos en A y B son myn respectivamente, y el tamaño del espacio de la matriz de A es m+n;

2. No devuelva la matriz fusionada, simplemente combine los datos de la matriz B con A, y el fondo imprimirá automáticamente el contenido de la matriz A fusionada, por lo que no es necesario imprimirlo usted mismo;

3. La matriz A también está ordenada en el rango de [0,m-1];


Ejemplo 1:


Ejemplo 2:


Análisis de resolución de problemas.

Ideas para resolver problemas:

Esta pregunta involucra dos matrices ordenadas, que deben combinarse y ordenarse, por lo que podemos usar punteros dobles;


Idea:

Dado que hay dos matrices ordenadas, si se puede usar una nueva matriz auxiliar, es fácil para nosotros usar la idea de clasificación por combinación para fusionar las dos submatrices ordenadas.


Pero esta pregunta requiere que agreguemos a la matriz A. Dado que la segunda mitad de la matriz A equivale a estar vacía, podemos considerar usar la idea de ordenación por combinación a la inversa, comenzando con la más grande. Para seleccionar el valor mayor de las dos matrices cada vez, debe usar dos punteros dobles que avancen al mismo tiempo.


Pasos para resolver el problema:

  • Paso 1: use tres punteros, i apunta al elemento más grande de la matriz A, j apunta al elemento más grande de la matriz B y k apunta al final del espacio de la matriz A.
  • Paso 2: Comience a recorrer desde el elemento más grande de las dos matrices hasta que termine una. Cada vez, saque el valor más grande y colóquelo al final de la matriz Un espacio, y luego el puntero avanza uno a la vez.
  • Paso 3: Si se recorre primero la matriz B, la primera mitad de la matriz A ya existe, así que no se preocupe; pero si se recorre primero la matriz A, debe agregar la primera mitad restante de la matriz B a la primera mitad. de la matriz A en orden inverso, similar a la ordenación por fusión.

Escritura de código:


2. Determinar si es una cuerda palíndromo.

Descripción de la pregunta

describir:

Dada una cadena de longitud n, escriba una función para determinar si la cadena es un palíndromo. Si es un palíndromo, devuelve verdadero; de lo contrario, devuelve falso.

Un palíndromo de cadena significa que el orden positivo de la cadena es consistente con su orden inverso carácter por carácter.


Rango de datos: 0<<n≤1000000

Requisitos: complejidad espacial O (1), complejidad temporal O (n)


Nota:  La longitud de la cadena no debe ser mayor que 1000000 y solo debe constar de letras minúsculas;


Ejemplo 1:


Ejemplo 2:


Ejemplo 3:


Ejemplo 4:


Análisis de resolución de problemas.

Ideas para resolver problemas:

Como queremos determinar si una cadena es un palíndromo, podemos usar punteros dobles para colisionar con una cadena, uno hacia adelante y otro hacia atrás, para chocar hacia adelante y hacia atrás y formar un puntero de colisión;

Análisis de código:


Pasos para resolver el problema:

  • Paso 1: Prepare dos punteros, uno al principio de la cadena y otro al final de la cadena.
  • Paso 2: El puntero al principio se mueve hacia atrás y el puntero al final se mueve hacia adelante. Compare los dos caracteres que pasan uno por uno para ver si son iguales. Si no son iguales, no es un palíndromo.
  • Paso 3: Hasta que los dos punteros se encuentren en el medio, seguirán siendo consistentes, lo cual es un palíndromo. Debido a que el primer puntero ha llegado a la segunda mitad, ha recorrido exactamente el mismo camino que el puntero de la cola, los dos acaban de intercambiar posiciones y siguen siendo los mismos si son iguales.

Análisis de ilustraciones:


Escritura de código:


Resumir

Supongo que te gusta

Origin blog.csdn.net/qq_64861334/article/details/133340693
Recomendado
Clasificación