Problem :
Given a sequence of integers A[n], find a pair of integers A[x]<A[y], such that y-x >= j-i and A[i]<A[j]
Solution:
In courtesy of JConstantine
Given a sequence of integers A[n], find a pair of integers A[x]<A[y], such that y-x >= j-i and A[i]<A[j]
Solution:
In courtesy of JConstantine
class Solution { public: std::vector<int> findLongestAscendingPair(const std::vector<int> &v) { std::vector<int> ret(2,0); int n = v.size(); if(n == 0) return ret; std::vector<int> left(n,0); std::vector<int> right(n,0); left[0] = v[0]; right[n-1] = v[n-1]; for(int i=1; i<n; i++){ left[i] = std::min(v[i], left[i-1]); } for(int i=n-2; i>=0; i--){ right[i] = std::max(v[i], right[i+1]); } int i = 0, j = 0, distance = 0; while(i < n && j < n) { if(left[i] < right[j]) { distance = std::max(j-i, distance); ret[0] = i; ret[1] = j; j = j + 1; } else { i = i+ 1; } } return ret; } };
No comments:
Post a Comment