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