คำอธิบายปัญหา
กำหนดอาร์เรย์ A ของจำนวนเต็มบวก A[i] = ค่าของสถานที่ท่องเที่ยวที่ i ระยะห่างระหว่าง i และ j คือ j-i คะแนนของคู่ (i ตัวอย่าง: [8,1,5,2,6] → 11 (i=0, j=2: 8+5+0-2=11) จัดรูปสูตร: (A[i] + i) + (A[j] - j) Complexity: O(n) เวลา, O(1) พื้นที่วิธีแก้ปัญหา (One Pass)
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int maxScoreSightseeingPair(vector<int>& A) {
int ret = 0;
int maxVal = 0;
int n = A.size();
for(int i = 0; i < n; i++) {
ret = max(ret, maxVal + A[i] - i);
maxVal = max(maxVal, A[i] + i);
}
return ret;
}
};
int main() {
vector<int> v1 = {8, 1, 5, 2, 6};
Solution ob;
cout << ob.maxScoreSightseeingPair(v1);
return 0;
}
อินพุต
[8,1,5,2,6]
เอาต์พุต
11