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