mientras resolvía la pregunta sobre leetcode que dice en una matriz dada de números enteros ordenados en orden no decreciente, encuentre la posición inicial y final de un valor objetivo determinado. por lo que fue imposible devolver el inicio y el final de un elemento de destino en una matriz con un simple escaneo binario porque solo devuelve el índice donde encontró el primer elemento de destino que puede ser cualquier cosa primero, final o medio de ese elemento. entonces usamos Double Binary Scarch y aquí se explica cómo hacerlo...
Primera búsqueda binaria:
Segunda búsqueda binaria:
Devolver resultado:
Complejidad del tiempo:
Complejidad espacial:
class Solution { public int[] searchRange(int[] nums, int target) { int ei = nums.length - 1; int si = 0; int[] res = {-1, -1}; // Initialize result array // First binary search to find the last occurrence while (si nums[mid]) { si = mid 1; } else { res[1] = mid; // Update end index si = mid 1; // Search in the right half } } // Reset the pointers for the second binary search si = 0; ei = nums.length - 1; // Second binary search to find the first occurrence while (si nums[mid]) { si = mid 1; } else { res[0] = mid; // Update start index ei = mid - 1; // Search in the left half } } return res; // Return the result array } }
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3