สลับค่าของเอลีเมนต์ตำแหน่งที่ k (1-based) จากหน้ากับตำแหน่งที่ k จากหลัง
ตัวอย่าง
arr = [0,1,2,3,4,5,6,7,8,9], k=4 index 3 (ค่า 3) ↔ index 6 (ค่า 6) Result: [0,1,2,6,4,5,3,7,8,9]
ตัวอย่างโค้ด
const swapKth = (arr, k) => {
const len = arr.length;
const idx = k - 1;
const idxFromEnd = len - k;
[arr[idx], arr[idxFromEnd]] = [arr[idxFromEnd], arr[idx]];
};
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
swapKth(arr, 4);
console.log(arr); // [0, 1, 2, 6, 4, 5, 3, 7, 8, 9]
swapKth(arr, 8);
console.log(arr); // [0, 1, 7, 6, 4, 5, 3, 2, 8, 9]
ผลลัพธ์
[ 0, 1, 2, 6, 4, 5, 3, 7, 8, 9 ] [ 0, 1, 7, 6, 4, 5, 3, 2, 8, 9 ]
การตรวจสอบขอบเขต
const swapKthSafe = (arr, k) => {
if (k < 1 || k > arr.length) return;
if (k - 1 === arr.length - k) return; // ตำแหน่งเดียวกัน (กึ่งกลาง)
[arr[k-1], arr[arr.length-k]] = [arr[arr.length-k], arr[k-1]];
};