เรามีข้อกำหนดที่เราต้องเขียนฟังก์ชันเพื่อย้อนกลับอาร์เรย์ แต่ไม่มีการเปลี่ยนแปลงดัชนีของอักขระพิเศษที่แสดงในอาร์เรย์ ดังตัวอย่างด้านล่าง -
ถ้า '#' เป็นอักขระพิเศษนั้น อาร์เรย์ต่อไปนี้
[18,-4,'#',0,8,'#',5]
ควรส่งคืน -
[5, 8, "#", 0, -4, "#", 18],
ที่นี่ ตัวเลขจะถูกกลับรายการ ยกเว้น '#' ซึ่งคงดัชนีไว้
มาเขียนโค้ดสำหรับสิ่งนี้กันเถอะ
เราจะใช้วิธีการแบบสองตัวชี้ที่นี่ จุดเริ่มต้นและจุดสิ้นสุดที่ชี้ไปทางซ้ายสุดสุดและขวาสุดของอาร์เรย์ตามลำดับ
หากพบอักขระพิเศษที่ดัชนีใด ๆ เราข้ามดัชนีนั้นและทำซ้ำต่อไป และเมื่อเราพบคู่ดัชนีที่ไม่มีอักขระพิเศษ เราจะสลับค่าของดัชนีนั้นและดำเนินการต่อไปในขณะที่ตัวชี้เริ่มต้นน้อยกว่าตัวชี้ที่ถูกต้อง .
ตัวอย่าง
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 ]