Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

วิธีแก้ปัญหาอัลกอริทึมกลับอาร์เรย์ใน JavaScript


เรามีข้อกำหนดที่ต้องเขียนฟังก์ชันเพื่อกลับอาร์เรย์ แต่ไม่เปลี่ยนดัชนีของตัวอักษรพิเศษในอาร์เรย์ เช่นตัวอย่างด้านล่าง −

ถ้า '#' เป็นตัวอักษรพิเศษ อาร์เรย์ต่อไปนี้

[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 ]