Untitled
unknown
c_cpp
2 years ago
1.1 kB
7
Indexable
vector<int> find_longest_increasing_subsequence(vector<int> nums) {
if (nums.empty()) {
return {};
}
vector<int> lengths(nums.size(), 1);
int maxLength = 1;
int maxIndex = 0;
for (int i = 1; i < nums.size(); ++i) {
for (int j = 0; j < i; ++j) {
if (nums[j] < nums[i] && lengths[j] + 1 > lengths[i]) {
lengths[i] = lengths[j] + 1;
}
}
if (lengths[i] > maxLength) {
maxLength = lengths[i];
maxIndex = i;
}
}
vector<int> subsequence;
int currentIndex = maxIndex;
subsequence.push_back(nums[currentIndex]);
while (lengths[currentIndex] > 1) {
for (int j = currentIndex - 1; j >= 0; --j) {
if (lengths[j] == lengths[currentIndex] - 1 && nums[j] < nums[currentIndex]) {
currentIndex = j;
subsequence.push_back(nums[currentIndex]);
break;
}
}
}
reverse(subsequence.begin(), subsequence.end());
return subsequence;
}
Editor is loading...