Longest Increasing Subsequence
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int longestIncreasingSubsequence(vector<int>& nums) {
vector<int> LIS (nums.size(), 0);
vector<int> LISPrevious (nums.size(), -1);
int max = 0;
int end = -1;
for (unsigned int i = 0; i < nums.size(); i++) {
LIS[i] = 1;
for (unsigned int j = 0; j < i; j++) {
if ((LIS[j] + 1) > LIS[i]) {
if (nums[j] < nums[i]) {
LIS[i] = LIS[j] + 1;
LISPrevious[i] = j;
}
}
}
if (LIS[i] > max) {
max = LIS[i];
end = i;
}
}
/*for DBG*/
#if 0
for (int i = 0; i < nums.size(); i++) {
cout << LIS[i] << ", " << LISPrevious[i] << "\n";
}
#endif
cout << "max = " << max << "\n";
if (max != 0) {
while (--max > 0) {
cout << nums[end] << ", ";
end = LISPrevious[end];
}
cout << nums[end] << "\n\n";
}
return max;
}
};
int main()
{
int myints[] = {50, 3, 10, 7, 40, 80};
std::vector<int> test (myints, myints + sizeof(myints) / sizeof(int) );
std::vector<int> none;
Solution solution;
solution.longestIncreasingSubsequence(test);
solution.longestIncreasingSubsequence(none);
return 1;
}
#include <vector>
using namespace std;
class Solution {
public:
int longestIncreasingSubsequence(vector<int>& nums) {
vector<int> LIS (nums.size(), 0);
vector<int> LISPrevious (nums.size(), -1);
int max = 0;
int end = -1;
for (unsigned int i = 0; i < nums.size(); i++) {
LIS[i] = 1;
for (unsigned int j = 0; j < i; j++) {
if ((LIS[j] + 1) > LIS[i]) {
if (nums[j] < nums[i]) {
LIS[i] = LIS[j] + 1;
LISPrevious[i] = j;
}
}
}
if (LIS[i] > max) {
max = LIS[i];
end = i;
}
}
/*for DBG*/
#if 0
for (int i = 0; i < nums.size(); i++) {
cout << LIS[i] << ", " << LISPrevious[i] << "\n";
}
#endif
cout << "max = " << max << "\n";
if (max != 0) {
while (--max > 0) {
cout << nums[end] << ", ";
end = LISPrevious[end];
}
cout << nums[end] << "\n\n";
}
return max;
}
};
int main()
{
int myints[] = {50, 3, 10, 7, 40, 80};
std::vector<int> test (myints, myints + sizeof(myints) / sizeof(int) );
std::vector<int> none;
Solution solution;
solution.longestIncreasingSubsequence(test);
solution.longestIncreasingSubsequence(none);
return 1;
}
留言
張貼留言