Dada una array ordenada , arr[] de tamaño N que representa las posiciones del i -ésimo punto en el eje X y un número entero K , la tarea es encontrar la distancia mínima requerida para viajar para visitar el punto K comenzando desde el origen de X- eje.
Ejemplos:
Entrada: arr[]={-30, -10, 10, 20, 50}, K = 3
Salida: 40
Explicación:
Pasar del origen al segundo punto. Por lo tanto, la distancia total recorrida = 10.
Pasando del segundo punto al tercer punto. Por lo tanto, recorrido total = 10 + 10 = 20
Moviéndose del tercer punto al cuarto punto. Por lo tanto, distancia total recorrida = 20 + 20 = 40
Por lo tanto, la distancia total recorrida para visitar el punto K es 40.Entrada: arr[]={-1, -5, -4, -3, 6}, K = 3
Salida: 6
Planteamiento: El problema se puede resolver visitando cada K punto consecutivo e imprimiendo la distancia mínima recorrida para visitar K puntos consecutivos. Siga los pasos a continuación para resolver el problema:
- Inicialice una variable, digamos res , para almacenar la distancia mínima recorrida para visitar el punto K.
- Inicialice una variable, digamos dist , para almacenar la distancia recorrida para visitar K puntos.
- Atraviese la array y verifique las siguientes condiciones.
- Si el valor de (arr[i] >= 0 y arr[i + K -1] >= 0) es verdadero, actualice dist = max(arr[i], arr[i + K -1]).
- De lo contrario, dist = abs(arr[i]) + abs(arr[i + K – 1]) + min(abs(arr[i]), abs(arr[i + K – 1])) .
- Finalmente, actualice res = min(res, dist) .
- Finalmente, imprima el valor de res .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std; // Function to find the minimum distance // travelled to visit K point int MinDistK(int arr[], int N, int K) { // Stores minimum distance travelled // to visit K point int res = INT_MAX; // Stores distance travelled // to visit points int dist = 0; // Traverse the array arr[] for (int i = 0; i <= (N - K); i++) { // If arr[i] and arr[i + K - 1] // are positive if (arr[i] >= 0 && arr[i + K - 1] >= 0) { // Update dist dist = max(arr[i], arr[i + K - 1]); } else { // Update dist dist = abs(arr[i]) + abs(arr[i + K - 1]) + min(abs(arr[i]), abs(arr[i + K - 1])); } // Update res res = min(res, dist); } return res; } // Driver Code int main() { int K = 3; // initial the array int arr[] = { -30, -10, 10, 20, 50 }; int N = sizeof(arr) / sizeof(arr[0]); cout<< MinDistK(arr, N, K); }
Java
// Java program to implement // the above approach import java.util.*; class solution{ // Function to find the minimum // distance travelled to visit // K point static int MinDistK(int arr[], int N, int K) { // Stores minimum distance // travelled to visit K point int res = Integer.MAX_VALUE; // Stores distance travelled // to visit points int dist = 0; // Traverse the array arr[] for (int i = 0; i <= (N - K); i++) { // If arr[i] and arr[i + K - 1] // are positive if (arr[i] >= 0 && arr[i + K - 1] >= 0) { // Update dist dist = Math.max(arr[i], arr[i + K - 1]); } else { // Update dist dist = Math.abs(arr[i]) + Math.abs(arr[i + K - 1]) + Math.min(Math.abs(arr[i]), Math.abs(arr[i + K - 1])); } // Update res res = Math.min(res, dist); } return res; } // Driver Code public static void main(String args[]) { int K = 3; // initial the array int arr[] = {-30, -10, 10, 20, 50}; int N = arr.length; System.out.println(MinDistK(arr, N, K)); } } // This code is contributed by bgangwar59
Python3
# Python3 program to implement # the above approach import sys # Function to find the minimum distance # travelled to visit K point def MinDistK(arr, N, K): # Stores minimum distance travelled # to visit K point res = sys.maxsize # Stores distance travelled # to visit points dist = 0 # Traverse the array arr[] for i in range(N - K + 1): # If arr[i] and arr[i + K - 1] # are positive if (arr[i] >= 0 and arr[i + K - 1] >= 0): # Update dist dist = max(arr[i], arr[i + K - 1]) else: # Update dist dist = (abs(arr[i]) + abs(arr[i + K - 1]) + min(abs(arr[i]), abs(arr[i + K - 1]))) # Update res res = min(res, dist) return res # Driver Code if __name__ == '__main__': K = 3 # Initial the array arr = [ -30, -10, 10, 20, 50 ] N = len(arr) print(MinDistK(arr, N, K)) # This code is contributed by ipg2016107
C#
// C# program to implement // the above approach using System; class GFG{ // Function to find the minimum // distance travelled to visit // K point static int MinDistK(int[] arr, int N, int K) { // Stores minimum distance // travelled to visit K point int res = Int32.MaxValue; // Stores distance travelled // to visit points int dist = 0; // Traverse the array arr[] for(int i = 0; i <= (N - K); i++) { // If arr[i] and arr[i + K - 1] // are positive if (arr[i] >= 0 && arr[i + K - 1] >= 0) { // Update dist dist = Math.Max(arr[i], arr[i + K - 1]); } else { // Update dist dist = Math.Abs(arr[i]) + Math.Abs(arr[i + K - 1]) + Math.Min(Math.Abs(arr[i]), Math.Abs(arr[i + K - 1])); } // Update res res = Math.Min(res, dist); } return res; } // Driver Code public static void Main() { int K = 3; // Initial the array int[] arr = { -30, -10, 10, 20, 50}; int N = arr.Length; Console.WriteLine(MinDistK(arr, N, K)); } } // This code is contributed by code_hunt
Javascript
<script> // JavaScript program to implement // the above approach // Function to find the minimum // distance travelled to visit // K point function MinDistK(arr, N, K) { // Stores minimum distance // travelled to visit K point let res = Number.MAX_VALUE; // Stores distance travelled // to visit points let dist = 0; // Traverse the array arr[] for (let i = 0; i <= (N - K); i++) { // If arr[i] and arr[i + K - 1] // are positive if (arr[i] >= 0 && arr[i + K - 1] >= 0) { // Update dist dist = Math.max(arr[i], arr[i + K - 1]); } else { // Update dist dist = Math.abs(arr[i]) + Math.abs(arr[i + K - 1]) + Math.min(Math.abs(arr[i]), Math.abs(arr[i + K - 1])); } // Update res res = Math.min(res, dist); } return res; } // Driver Code let K = 3; // initial the array let arr = [-30, -10, 10, 20, 50]; let N = arr.length; document.write(MinDistK(arr, N, K)); </script>
40
Complejidad de tiempo: O (NK), donde n es la longitud de la array dada para el valor de K dado.
Espacio Auxiliar:O(1)
Publicación traducida automáticamente
Artículo escrito por grand_master y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA