From 2c12a592e5bec9c5628bacce2afa0f1f7e1d5afa Mon Sep 17 00:00:00 2001 From: David Leal Date: Mon, 7 Jun 2021 15:26:34 -0500 Subject: [PATCH] [feat/fix/docs]: Improve the `dynamic_programming/longest_increasing_subsequence.cpp` file --- .../longest_increasing_subsequence.cpp | 60 ++++++++++++++----- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/dynamic_programming/longest_increasing_subsequence.cpp b/dynamic_programming/longest_increasing_subsequence.cpp index b6a798aa0..2d0d03ea7 100644 --- a/dynamic_programming/longest_increasing_subsequence.cpp +++ b/dynamic_programming/longest_increasing_subsequence.cpp @@ -1,8 +1,29 @@ -// Program to calculate length of longest increasing subsequence in an array -#include -using namespace std; -int LIS(int a[], int n) { - int lis[n]; +/** + * @file + * @brief Calculate the length of the [longest increasing subsequence](https://en.wikipedia.org/wiki/Longest_increasing_subsequence) in an array + * + * @details + * In computer science, the longest increasing subsequence problem is to find a subsequence of a given sequence in which the subsequence's elements are in sorted order, lowest to highest, and in which the subsequence is as long as possible. + * This subsequence is not necessarily contiguous, or unique. Longest increasing subsequences are studied in the context of various disciplines related to mathematics, including algorithmics, random matrix theory, representation theory, and physics. + * The longest increasing subsequence problem is solvable in time O(n log n), where n denotes the length of the input sequence. + * + * @author [Krishna Vedala](https://github.com/kvedala) + * @author [David Leal](https://github.com/Panquesito7) + */ + +#include /// for IO operations +#include /// for std::max +#include /// for std::vector + +/** + * @brief Calculate the longest increasing subsequence for the specified numbers + * @param a the array used to calculate the longest increasing subsequence + * @param n the size used for the arrays + * @returns the length of the longest increasing + * subsequence in the `a` array of size `n` + */ +int LIS(const std::vector &a, const uint32_t &n) { + std::vector lis(n); for (int i = 0; i < n; ++i) { lis[i] = 1; } @@ -14,19 +35,30 @@ int LIS(int a[], int n) { } int res = 0; for (int i = 0; i < n; ++i) { - res = max(res, lis[i]); + res = std::max(res, lis[i]); } return res; } + +/** + * @brief Main function + * @param argc commandline argument count (ignored) + * @param argv commandline array of arguments (ignored) + * @returns 0 on exit + */ int main(int argc, char const *argv[]) { - int n; - cout << "Enter size of array: "; - cin >> n; - int a[n]; - cout << "Enter array elements: "; + uint32_t n = 0; + + std::cout << "Enter size of array: "; + std::cin >> n; + + std::vector a(n); + + std::cout << "Enter array elements: "; for (int i = 0; i < n; ++i) { - cin >> a[i]; + std::cin >> a[i]; } - cout << LIS(a, n) << endl; + + std::cout << "The result is: " << LIS(a, n) << std::endl; return 0; -} \ No newline at end of file +}