برنامه نویسی

LeetCode Day 36 Programming Dynamic Part 10

Summarize this content to 400 words in Persian Lang

با توجه به اعداد آرایه عدد صحیح، طول طولانی ترین را به شدت افزایش می دهد دنباله.

مثال 1:

ورودی: nums = [10,9,2,5,3,7,101,18]خروجی: 4توضیح: طولانی ترین دنباله افزایشی است [2,3,7,101]بنابراین طول آن 4 است.مثال 2:

ورودی: nums = [0,1,0,3,2,3]خروجی: 4مثال 3:

ورودی: nums = [7,7,7,7,7,7,7]خروجی: 1

محدودیت ها:

1 -10^4

پیگیری: آیا می توانید الگوریتمی ارائه دهید که در پیچیدگی زمانی O(n log(n)) اجرا شود؟صفحه اصلی

کد اشتباه

public int lengthOfLIS(int[] nums) {
int start = nums[0];
int pre = nums[0];
int preMax = nums[0];
int cnt = 1;
int max = 1;

for(int i=1; i pre){
cnt ++;
}
pre = nums[i];
System.out.println(“cur:”+nums[i] + ” pre:”+pre+ ” count:” + cnt);
}
return Math.max(max, cnt);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

رفع اشکال

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نقشه درختی از دیگران بیاموزید

public int lengthOfLIS(int[] nums) {

TreeMap map = new TreeMap();

map.put(Integer.MIN_VALUE,0);

for(int i: nums)
{
map.put(i,map.get(map.lowerKey(i))+1);
while(map.higherKey(i)!=null && map.get(map.higherKey(i))

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با توجه به یک آرایه مرتب نشده از اعداد صحیح، طول طولانی‌ترین دنباله افزایش پیوسته (یعنی زیرآرایه) را برگردانید. دنباله باید به شدت افزایش یابد.

یک دنباله افزایش پیوسته با دو شاخص l و r (l

مثال 1:

ورودی: nums = [1,3,5,4,7]خروجی: 3توضیح: طولانی ترین دنباله افزایش پیوسته است [1,3,5] با طول 3.بااینکه [1,3,5,7] یک دنباله افزایشی است، پیوسته نیست زیرا عناصر 5 و 7 با عنصر جدا می شوند4.مثال 2:

ورودی: nums = [2,2,2,2,2]خروجی: 1توضیح: طولانی ترین دنباله افزایش پیوسته است [2] با طول 1. توجه داشته باشید که باید به شدت باشدافزایش می یابد.

محدودیت ها:

1 -10^9 صفحه اصلی

الگوریتم حریص

public int findLengthOfLCIS(int[] nums) {
if(nums.length pre){
cnt++;
}else{
res = Math.max(res, cnt);
cnt = 1;
}
// System.out.println(“cur: ” + nums[i] + ” pre:” + pre + ” count:” + cnt);
pre = nums[i];
}
return Math.max(res, cnt);
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برنامه نویسی پویا

متفاوت از سوال قبلی، در این سوال ما فقط می‌توانیم دنباله‌های بعدی را به طور مداوم در نظر بگیریم که این روند را ساده‌تر می‌کند.

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با توجه به اعداد آرایه عدد صحیح، طول طولانی ترین را به شدت افزایش می دهد
دنباله
.

مثال 1:

ورودی: nums = [10,9,2,5,3,7,101,18]خروجی: 4
توضیح: طولانی ترین دنباله افزایشی است [2,3,7,101]بنابراین طول آن 4 است.
مثال 2:

ورودی: nums = [0,1,0,3,2,3]خروجی: 4
مثال 3:

ورودی: nums = [7,7,7,7,7,7,7]خروجی: 1

محدودیت ها:

1 -10^4

پیگیری: آیا می توانید الگوریتمی ارائه دهید که در پیچیدگی زمانی O(n log(n)) اجرا شود؟
صفحه اصلی

کد اشتباه

    public int lengthOfLIS(int[] nums) {
        int start = nums[0];
        int pre = nums[0];
        int preMax = nums[0];
        int cnt = 1;
        int max = 1;

        for(int i=1; i pre){
                cnt ++;
            }
            pre = nums[i];
            System.out.println("cur:"+nums[i] + " pre:"+pre+ " count:" + cnt);
        }
        return Math.max(max, cnt);
    }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

رفع اشکال


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نقشه درختی از دیگران بیاموزید

    public int lengthOfLIS(int[] nums) {


        TreeMap map = new TreeMap();

        map.put(Integer.MIN_VALUE,0);

       for(int i: nums)
       {
           map.put(i,map.get(map.lowerKey(i))+1);
           while(map.higherKey(i)!=null && map.get(map.higherKey(i))
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


با توجه به یک آرایه مرتب نشده از اعداد صحیح، طول طولانی‌ترین دنباله افزایش پیوسته (یعنی زیرآرایه) را برگردانید. دنباله باید به شدت افزایش یابد.

یک دنباله افزایش پیوسته با دو شاخص l و r (l

مثال 1:

ورودی: nums = [1,3,5,4,7]خروجی: 3
توضیح: طولانی ترین دنباله افزایش پیوسته است [1,3,5] با طول 3.
بااینکه [1,3,5,7] یک دنباله افزایشی است، پیوسته نیست زیرا عناصر 5 و 7 با عنصر جدا می شوند
4.
مثال 2:

ورودی: nums = [2,2,2,2,2]خروجی: 1
توضیح: طولانی ترین دنباله افزایش پیوسته است [2] با طول 1. توجه داشته باشید که باید به شدت باشد
افزایش می یابد.

محدودیت ها:

1 -10^9 صفحه اصلی

الگوریتم حریص

    public int findLengthOfLCIS(int[] nums) {
        if(nums.length  pre){
                cnt++;
            }else{
                res = Math.max(res, cnt);
                cnt = 1;
            }
            // System.out.println("cur: " + nums[i] + " pre:" + pre + " count:" + cnt);
            pre = nums[i];
        }
        return Math.max(res, cnt);
    }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برنامه نویسی پویا

متفاوت از سوال قبلی، در این سوال ما فقط می‌توانیم دنباله‌های بعدی را به طور مداوم در نظر بگیریم که این روند را ساده‌تر می‌کند.


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا