เรามีข้อกำหนดที่ต้องเขียนฟังก์ชันเพื่อกลับอาร์เรย์ แต่ไม่เปลี่ยนดัชนีของตัวอักษรพิเศษในอาร์เรย์ เช่นตัวอย่างด้านล่าง −
ถ้า '#' เป็นตัวอักษรพิเศษ อาร์เรย์ต่อไปนี้
[18,-4,'#',0,8,'#',5]
ควรคืนค่า −
[5, 8, "#", 0, -4, "#", 18],
ที่นี่ ตัวเลขถูกกลับลำดับ ยกเว้น '#' ที่คงดัชนีไว้
มาเขียนโค้ดสำหรับนี้
เราจะใช้วิธี two-pointer ที่นี่ start และ end ชี้ไปที่ขวาสุดและซ้ายสุดของอาร์เรย์ตามลำดับ
ถ้าที่ดัชนีไหนพบตัวอักษรพิเศษ เราข้ามดัชนีนั้นและวนต่อ และเมื่อเราพบคู่ดัชนีที่ไม่มีตัวอักษรพิเศษ เราสลับค่าของพวกเขา และเราทำต่อไปจน start pointer น้อยกว่า end pointer
ตัวอย่าง
const arr = [18,-4,'#',0,8,'#',5]; const reverseArray = (arr, special) => { let start = 0, end = arr.length - 1, temp; while(start < end){ if(arr[start] === special){ start++; continue; }; if(arr[end] === special){ end--; continue; }; temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; }; }; reverseArray(arr, '#'); console.log(arr);ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้
[ 5, 8, '#', 0, -4, '#', 18 ]