408 Estructura de datos de King's Road Ejercicios de código después de clase (7)

¡Acostúmbrate a escribir juntos! Este es el día 11 de mi participación en el "Nuevo plan diario de Nuggets · Desafío de actualización de abril", haga clic para ver los detalles del evento .

Planeo actualizar la implementación de todos los ejercicios de código extraescolares en la estructura de datos de King's Road 23. Aunque los exámenes generalmente están escritos en pseudocódigo, los he implementado todos para el trastorno obsesivo-compulsivo. El almacén está aquí.

  • Mesa lineal

2.2.3, 13

imagen.png

  • Encuentre el entero positivo más pequeño, para que no tenga que lidiar con números negativos
  • La idea sigue siendo la misma que la primera solución de 12 preguntas, similar a la clasificación de cubos
  • Abra una nueva matriz, el subíndice corresponde al valor del elemento y el valor corresponde a si aparece el elemento
  • Complejidad temporal O(n), complejidad espacial O(n),¿Es ya la mejor solución?
int find_miss_min(SqList list) {
  // 1.初始化一个全为0的数组
  int tmp[list.length] = {0};

  // 2.下标对应元素值,值对应元素是否出现
  for (int i = 0; i < list.length; i++) {
    if (list.data[i] > 0 && list.data[i] <= list.length)
      tmp[list.data[i]]++;
  }

  // 3.找到最小正整数
  int i;
  for (i = 1; i < list.length; i++) {
    if (tmp[i] == 0) 
      return i;
  }
  return i;
}
复制代码

2.2.3, 14

imagen.png

  • ¡Violencia, triple bucle directo!
  • Uno por uno, encuentra el más pequeño.
  • Complejidad temporal O(n 3 ), complejidad temporal O(1)
int find_min_distance(int A[], int B[], int C[], int n1, int n2, int n3) {
  int dmin = INT_MAX, d;
  for (int i = 0; i < n1; i++) {
    for (int j = 0; j < n2; j++) {
      for (int k = 0; k < n3; k++) {
        // 计算距离
        d = abs(A[i] - B[j]) + abs(B[j] - C[k]) + abs(C[k] - A[i]);
        // 更新最小值
        if (d < dmin) dmin = d;
      }
    }
  }
  return dmin;
}
复制代码
  • Como todos sabemos, el valor absoluto refleja la distancia en la recta numérica

  • Cuando a=b=c, la distancia es la más pequeña

  • Cuando a<=b<=c, como se muestra en la figura

    imagen-20220412161949387.png

  • El factor que determina el tamaño de D es la distancia entre c y a, por lo que podemos encontrar una a que minimice la distancia cada vez que fijamos c

  • Complejidad temporal O(n), complejidad espacial O(1)

// n1是否是三个数中的最小值
bool find_min(int n1, int n2, int n3) {
  if (n1 <= n2 && n1 <= n3) return true;
  return false;
}

int find_min_distance2(int A[], int B[], int C[], int n1, int n2, int n3) {
  int dmin = INT_MAX, d, i = 0, j = 0, k = 0;
  while(i < n1 && j < n2 && k < n3) {
    // 计算距离
    d = abs(A[i] - B[j]) + abs(B[j] - C[k]) + abs(C[k] - A[i]);
    // 更新最小值
    if (d < dmin) dmin = d;
		
    if (find_min(A[i], B[j], C[k])) i++;
    else if (find_min(B[j], C[k], A[i])) j++;
    else k++;
  }
  return dmin;
}
复制代码
  • La lista de secuencias se ha actualizado, continúe actualizando la lista vinculada mañana

Supongo que te gusta

Origin juejin.im/post/7085899351087808543
Recomendado
Clasificación