ได้รับตัวเลข k และอาร์เรย์ arr[n] ที่มี n จำนวนเต็ม เก็บ ID ของ Apps ที่เปิดอยู่ในระบบ งานคือแสดง k แอปที่ใช้ล่าสุด (Most Recently Used) เหมือนกด Alt+Tab แสดงแอปเปิดอยู่ แอปล่าสุดอยู่ก่อน แอปเก่าสุดอยู่ท้าย ตำแหน่งของแต่ละ ID แทนแอปต่างๆ:
- ID ใน arr[0] คือ App ที่ใช้งานอยู่
- ID ใน arr[1] คือ App ที่ใช้ล่าสุด
- ID ใน arr[n-1] คือ App ที่ใช้เก่าสุด
หมายเหตุ - เมื่อกด Alt+Tab มี Pointer เคลื่อนผ่าน Apps เริ่มจาก Index 0 (App ที่ใช้งานอยู่)
ตัวอย่าง
Input: arr[] = {1, 2, 3, 4, 5}, k=2
Output: 3 1 2 4 5
คำอธิบาย: ต้องการสลับไป App ID 3 จะกลายเป็น Current App และ App อื่นๆ จะเป็น Recently Used ตามลำดับ
Input: arr[] = {6, 1, 9, 5, 3}, k=3
Output: 5 6 1 9 3
วิธีแก้:
- รับ Array arr[n] และ k
- หา Index k ของ App ที่ User ต้องการสลับ
- ทำให้ ID ที่ Index k กลายเป็น Current แล้วจัดเรียงตามลำดับ
- พิมพ์ผลลัพธ์
อัลกอริทึม
Start
Step 1: ฟังก์ชันหา K Most Recently Used Apps
void recently(int* arr, int size, int elem)
Declare int index = 0
Set index = (elem % size)
Declare and set int temp = index, id = arr[index]
Loop While temp > 0
Set arr[temp] = arr[--temp]
End
Set arr[0] = id
Step 2: ฟังก์ชันพิมพ์ Array
void print(int* arr, int size)
Loop For i = 0 to size-1
Print arr[i]
End
Step 3: ใน main()
Declare int elem = 3
Declare array int arr[] = { 6, 1, 9, 5, 3 }
Calculate size = sizeof(arr) / sizeof(arr[0])
Call recently(arr, size, elem)
Call print(arr, size)
Stop
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
void recently(int* arr, int size, int elem) {
int index = 0;
index = (elem % size);
int temp = index, id = arr[index];
while (temp > 0) {
arr[temp] = arr[--temp];
}
arr[0] = id;
}
void print(int* arr, int size) {
for (int i = 0; i < size; i++)
cout << arr[i] << " ";
}
int main() {
int elem = 3;
int arr[] = { 6, 1, 9, 5, 3 };
int size = sizeof(arr) / sizeof(arr[0]);
recently(arr, size, elem);
cout << "array in most recently used fashion : ";
print(arr, size);
return 0;
}
ผลลัพธ์
array in most recently used fashion : 5 6 1 9 3