เราได้รับอาร์เรย์ของจำนวนเต็ม อาร์เรย์มีการเกิดซ้ำขององค์ประกอบเดียวกันหลายครั้ง งานคือการหาระยะห่างสูงสุดระหว่างองค์ประกอบเดียวกันสองตัวของอาร์เรย์ เราจะเลือกแต่ละองค์ประกอบจากอาร์เรย์เริ่มจากด้านซ้าย จากนั้นหาครั้งสุดท้ายของตัวเลขเดียวกันนั้นและเก็บความต่างของดัชนี ถ้าความต่างนี้เป็นค่าสูงสุด ให้คืนค่า
ตัวอย่าง
อินพุต
Arr[] = { 1, 2, 4, 1, 3, 4, 2, 5, 6, 5 }
เอาต์พุต — ระยะห่างสูงสุดระหว่างสองครั้งขององค์ประกอบเดียวกันในอาร์เรย์ — 4
คำอธิบาย — ตัวเลขที่ซ้ำกันพร้อมดัชนี —
1. 1, ดัชนีแรก 0, ดัชนีสุดท้าย 3 ระยะห่าง = 3-0-1 = 2 2. 2, ดัชนีแรก 1, ดัชนีสุดท้าย 6 ระยะห่าง = 6-1-1 = 4 3. 5, ดัชนีแรก 7, ดัชนีสุดท้าย 9 ระยะห่าง = 9-7-1 = 1 ระยะห่างสูงสุดระหว่างสองครั้งขององค์ประกอบเดียวกัน: 4
อินพุต
Arr[] = { 10, 20, 1, 10, 10, 21, 12, 0 }
เอาต์พุต — ระยะห่างสูงสุดระหว่างสองครั้งขององค์ประกอบเดียวกันในอาร์เรย์ — 3
วิธีการที่ใช้ในโปรแกรม
- รับอาร์เรย์จำนวนเต็มที่มีตัวเลขซ้ำเป็น Arr[]
- ฟังก์ชัน maxDistance(int arr[], int n) ใช้คำนวณระยะห่างสูงสุดระหว่างสองครั้งขององค์ประกอบเดียวกัน
- กำหนดตัวแปร maxD เริ่มต้นเป็น -1
- ในลูป for วนอาร์เรย์จากจุดเริ่มต้น
- ใน nested for loop วนองค์ประกอบที่เหลือและค้นหาการซ้ำถ้ามี (if (arr[i] == arr[j]))
- ถ้าเป็นจริง ให้คำนวณความต่างของตัวเลขโดยลบดัชนี (temp = j-i-1)
- ถ้าค่านี้เป็นค่าสูงสุดที่พบจนถึงตอนนี้ ให้เก็บใน maxD
- คืนค่า maxD หลังจากวนอาร์เรย์ทั้งหมด
ตัวอย่างโค้ด
#include <stdio.h>
#include <math.h>
int maxDistance(int arr[], int n) {
int size = n;
int maxD = -1;
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (arr[i] == arr[j]) {
int temp = abs(j - i - 1);
maxD = maxD > temp ? maxD : temp;
}
return maxD;
}
// โค้ดหลัก
int main() {
int Arr[] = {1, 2, 4, 1, 3, 4, 2, 5, 6, 5};
printf("ระยะห่างสูงสุดระหว่างสองครั้งขององค์ประกอบเดียวกันในอาร์เรย์: %d", maxDistance(Arr, 10));
return 0;
}
ผลลัพธ์
หากรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้ —
ระยะห่างสูงสุดระหว่างสองครั้งขององค์ประกอบเดียวกันในอาร์เรย์ — 4