Programa para aplicaciones K usadas más recientemente (MRU)

Dado un entero K y una array arr[] de N enteros que contiene los identificadores de las aplicaciones abiertas en un sistema donde 
 

  1. arr[0] es la aplicación actualmente en uso
  2. arr[1] es la aplicación que se usó más recientemente y
  3. arr[N – 1] es la aplicación que se usó menos recientemente.

La tarea es imprimir el contenido de la array cuando el usuario que usa el sistema presiona Alt + Tab exactamente K veces. Tenga en cuenta que después de presionar la tecla Alt + Tabulador , el puntero de apertura de la aplicación se moverá a través de las aplicaciones desde el índice 0 hacia la derecha, según la cantidad de pulsaciones, por lo que la aplicación en la que finaliza la pulsación cambiará al índice 0, porque se convertirá en la más reciente. aplicación abierta.
Ejemplos: 
 

Entrada: arr[] = {3, 5, 2, 4, 1}, K = 3 
Salida: 4 3 5 2 1 
El usuario quiere cambiar a la aplicación con id 4, se convertirá en la aplicación actualmente activa y la anterior la aplicación activa (con ID 3) será la aplicación utilizada más recientemente.
Entrada: arr[] = {5, 7, 2, 3, 4, 1, 6}, K = 10 
Salida: 3 5 7 2 4 1 6 
 

Enfoque: obtenga el índice de la aplicación a la que el usuario desea cambiar, es decir , appIndex = K % N . Ahora, la aplicación activa actual será arr[appIndex] y todas las demás aplicaciones en el rango de índice [0, appIndex – 1] deberán desplazarse 1 elemento hacia la derecha.
A continuación se muestra la implementación del enfoque anterior: 
 

C++14

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to update the array
// in most recently used fashion
void mostRecentlyUsedApps(int* arr, int N, int K)
{
    int app_index = 0;
 
    // Finding the end index after K presses
    app_index = (K % N);
 
    // Shifting elements by 1 towards the found index
    // on which the K press ends
    int x = app_index, app_id = arr[app_index];
    while (x > 0) {
        arr[x] = arr[--x];
    }
 
    // Update the current active app
    arr[0] = app_id;
}
 
// Utility function to print
// the contents of the array
void printArray(int* arr, int N)
{
    for (int i = 0; i < N; i++)
        cout << arr[i] << " ";
}
 
// Driver code
int main()
{
    int K = 3;
    int arr[] = { 3, 5, 2, 4, 1 };
    int N = sizeof(arr) / sizeof(arr[0]);
 
    mostRecentlyUsedApps(arr, N, K);
    printArray(arr, N);
    return 0;
}

C#

// C# implementation of the approach
using System;
 
class GFG
{
     
// Function to update the array
// in most recently used fashion
static void mostRecentlyUsedApps(int []arr, int N, int K)
{
    int app_index = 0;
 
    // Finding the end index after K presses
    app_index = (K % N);
 
    // Shifting elements by 1 towards the found index
    // on which the K press ends
    int x = app_index, app_id = arr[app_index];
    while (x > 0)
    {
        arr[x] = arr[--x];
    }
 
    // Update the current active app
    arr[0] = app_id;
}
 
// Utility function to print
// the contents of the array
static void printArray(int []arr, int N)
{
    for (int i = 0; i < N; i++)
        Console.Write(arr[i]+" ");
}
 
// Driver code
static void Main()
{
    int K = 3;
    int []arr = { 3, 5, 2, 4, 1 };
    int N = arr.Length;
 
    mostRecentlyUsedApps(arr, N, K);
    printArray(arr, N);
}
}
 
// This code is contributed by mits

Javascript

<script>
// Javascript implementation of the approach
 
// Function to update the array
// in most recently used fashion
function mostRecentlyUsedApps(arr, N, K) {
    let app_index = 0;
 
    // Finding the end index after K presses
    app_index = (K % N);
 
    // Shifting elements by 1 towards the found index
    // on which the K press ends
    let x = app_index, app_id = arr[app_index];
    while (x > 0) {
        arr[x] = arr[--x];
    }
 
    // Update the current active app
    arr[0] = app_id;
}
 
// Utility function to print
// the contents of the array
function printArray(arr, N) {
    for (let i = 0; i < N; i++)
        document.write(arr[i] + " ");
}
 
// Driver code
 
let K = 3;
let arr = [3, 5, 2, 4, 1];
let N = arr.length;
 
mostRecentlyUsedApps(arr, N, K);
printArray(arr, N);
 
// This code is contributed by gfgking.
</script>

Java

/*package whatever //do not write package name here */
 
import java.io.*;
 
class GFG {
    public static void main(String[] args)
    {
        int[] num = { 3, 5, 2, 4, 1 };
        int size = num.length;
        // 8,6,7,9,0,2,1,12,89
        int d = 3;
 
        int appIndex = d % size;
        int appId = num[appIndex];
 
        for (int i = appIndex; i > 0; i--) {
            num[i] = num[i - 1];
        }
        num[0] = appId;
 
        for (int i = 0; i < num.length; i++) {
            System.out.print(" " + num[i]);
        }
    }
}
Producción

4 3 5 2 1 

Complejidad de tiempo: O(N)
 

Publicación traducida automáticamente

Artículo escrito por Dhirendra121 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *