สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n มีทหาร n นายยืนเป็นวงกลม สำหรับทหาร ความสูงคือ A[i] หน่วยลาดตระเวนสามารถสร้างจากทหารสองคนที่อยู่ติดกันซึ่งมีความสูงต่างกันเพียงเล็กน้อย ดังนั้นแต่ละอันจะสังเกตเห็นได้น้อยลงเมื่อเทียบกัน เราต้องหาดัชนีของทหารสองคนที่สามารถสร้างหน่วยลาดตระเวนได้
ดังนั้น หากอินพุตเป็น A =[10, 12, 13, 15, 10] ผลลัพธ์จะเป็น (5, 1)
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
n := size of A D := |A[0] - A[n - 1]| H := n for initialize i := 1, when i < n, update (increase i by 1), do: if D > |A[i] - A[i - 1]|, then: D := |A[i] - A[i - 1]| H := i print H and (H mod n)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
void solve(vector<int> A) {
int n = A.size();
int D = abs(A[0] - A[n - 1]);
int H = n;
for (int i = 1; i < n; i++) {
if (D > abs(A[i] - A[i - 1])) {
D = abs(A[i] - A[i - 1]);
H = i;
}
}
cout << H << ", " << (H % n) + 1;
}
int main() {
vector<int> A = { 10, 12, 13, 15, 10 };
solve(A);
} อินพุต
{ 10, 12, 13, 15, 10 } ผลลัพธ์
5, 1