Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การหาความยาวของลำดับย่อยเพิ่มต่อเนื่องที่ยาวที่สุดในอาร์เรย์ด้วย C#


เมธอด LongestIncreasingSubsequence คืนค่าความยาวของลำดับย่อยที่เพิ่มขึ้นต่อเนื่องจากอาร์เรย์ ใช้ลูป for วนลูปและนับจำนวน ผลลัพธ์สุดท้ายจะได้ค่าสูงสุด Time Complexity O(N) เพราะเข้าถึงแต่ละอิลิเมนต์ครั้งเดียว Space Complexity O(1) เพราะไม่ใช้พื้นที่เก็บข้อมูลเพิ่ม

ตัวอย่าง: {2, 4, 6, 5, 8}

ผลลัพธ์: 3 (ลำดับ 2, 4, 6)

ตัวอย่างโค้ด

public class Arrays
{
    public int LongestIncreasingSubsequence(int[] nums)
    {
        if (nums == null || nums.Length == 0)
        {
            return -1;
        }
        int res = 0, count = 0;
        for (int i = 0; i < nums.Length; i++)
        {
            if (i == 0 || nums[i] > nums[i - 1])
            {
                count++;
                res = Math.Max(res, count);
            }
            else
            {
                count = 1;
            }
        }
        return res;
    }
}

static void Main(string[] args)
{
    int[] nums = { 1, 3, 5, 4, 7 };
    Arrays s = new Arrays();
    Console.WriteLine(s.LongestIncreasingSubsequence(nums));
}

ผลลัพธ์

3