Рубрики

Программа для K самых недавно использованных (MRU) приложений

Дано целое число K и массив arr [] из N целых чисел, который содержит идентификаторы открытых приложений в системе, где

  1. arr [0] это приложение, которое используется в настоящее время
  2. обр [1] является приложением , которое совсем недавно было использовано и
  3. arr [N — 1] — приложение, которое использовалось реже всего.

Задача состоит в том, чтобы напечатать содержимое массива, когда пользователь, использующий систему, нажимает Alt + Tab ровно K раз. Обратите внимание, что после нажатия клавиши Alt + Tab указатель открытия приложения будет перемещаться по приложениям с 0-го индекса вправо, в зависимости от количества нажатий, поэтому приложение, в котором заканчивается печать, сместится к 0-му индексу, поскольку это станет самым последним открытое приложение.

Примеры:

Input: arr[] = {3, 5, 2, 4, 1}, K = 3
Output: 4 3 5 2 1
User want to switch to the app with id 4, it’ll become the currently active app and the previously active app (with id 3) will be the most recently used app.

Input: arr[] = {5, 7, 2, 3, 4, 1, 6}, K = 10
Output: 3 5 7 2 4 1 6

Подход: получить индекс приложения, на которое пользователь хочет переключиться, т.е. appIndex = K% N. Теперь текущим активным приложением будет arr [appIndex], а все остальные приложения в диапазоне индексов [0, appIndex — 1] должны быть смещены на 1 элемент вправо.

Ниже приведена реализация вышеуказанного подхода:

C ++

// C ++ реализация подхода
#include <bits/stdc++.h>

using namespace std;

  
// Функция для обновления массива
// самым последним использованным способом

void mostRecentlyUsedApps(int* arr, int N, int K)

{

    int app_index = 0;

  

    // Находим индекс конца после нажатия K

    app_index = (K % N);

  

    // Смещение элементов на 1 в сторону найденного индекса

    // на котором заканчивается печать K

    int x = app_index, app_id = arr[app_index];

    while (x > 0) {

        arr[x] = arr[--x];

    }

  

    // Обновляем текущее активное приложение

    arr[0] = app_id;

}

  
// Утилита для печати
// содержимое массива

void printArray(int* arr, int N)

{

    for (int i = 0; i < N; i++)

        cout << arr[i] << " ";

}

  
// Код драйвера

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 # реализация подхода

using System;

  

class GFG

{

      
// Функция для обновления массива
// самым последним использованным способом

static void mostRecentlyUsedApps(int []arr, int N, int K)

{

    int app_index = 0;

  

    // Находим индекс конца после нажатия K

    app_index = (K % N);

  

    // Смещение элементов на 1 в сторону найденного индекса

    // на котором заканчивается печать K

    int x = app_index, app_id = arr[app_index];

    while (x > 0) 

    {

        arr[x] = arr[--x];

    }

  

    // Обновляем текущее активное приложение

    arr[0] = app_id;

}

  
// Утилита для печати
// содержимое массива

static void printArray(int []arr, int N)

{

    for (int i = 0; i < N; i++)

        Console.Write(arr[i]+" ");

}

  
// Код драйвера

static void Main()

{

    int K = 3;

    int []arr = { 3, 5, 2, 4, 1 };

    int N = arr.Length;

  

    mostRecentlyUsedApps(arr, N, K);

    printArray(arr, N);

}
}

  
// Этот код предоставлен mits

Выход:

4 3 5 2 1

Сложность времени: O (N)

Рекомендуемые посты:

Программа для K самых недавно использованных (MRU) приложений

0.00 (0%) 0 votes