Rumah > Java > javaTutorial > teks badan

Pengaturcaraan Dinamik Hari LeetCode Bahagian 10

王林
Lepaskan: 2024-07-19 13:07:01
asal
271 orang telah melayarinya

LeetCode Day Dynamic Programming Part 10

300. Susulan Bertambah Terpanjang

Memandangkan nombor tatasusunan integer, kembalikan panjang terpanjang yang semakin meningkat dengan ketat
seterusnya
.

Contoh 1:

Input: nombor = [10,9,2,5,3,7,101,18]
Keluaran: 4
Penjelasan: Susulan peningkatan terpanjang ialah [2,3,7,101], oleh itu panjangnya ialah 4.
Contoh 2:

Input: nombor = [0,1,0,3,2,3]
Keluaran: 4
Contoh 3:

Input: nombor = [7,7,7,7,7,7,7]
Keluaran: 1

Kekangan:

1 <= nums.length <= 2500
-10^4 <= angka[i] <= 10^4

Susulan: Bolehkah anda menghasilkan algoritma yang berjalan dalam kerumitan masa O(n log(n))?
Halaman Asal

Kod yang salah

    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<nums.length; i++){
            if(nums[i] < start){
                max = Math.max(max, cnt);
                start = nums[i];
                cnt = 1;
            } 
            else if(nums[i] > pre){
                cnt ++;
            }
            pre = nums[i];
            System.out.println("cur:"+nums[i] + " pre:"+pre+ " count:" + cnt);
        }
        return Math.max(max, cnt);
    }


</p>
<h2>
  
  
  Betulkan pepijat
</h2>


<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">
Salin selepas log masuk
Salin selepas log masuk

Belajar Daripada peta pokok orang lain

    public int lengthOfLIS(int[] nums) {


        TreeMap<Integer,Integer> 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))<=map.get(i)) 
           {
            map.remove(map.higherKey(i));
           }
       }

       return map.get(map.lastKey());

    }
Salin selepas log masuk

674. Susulan Peningkatan Berterusan Terpanjang

Memandangkan tatasusunan nombor integer yang tidak diisih, kembalikan panjang jujukan peningkatan berterusan terpanjang (iaitu subarray). Susulan mesti meningkat dengan ketat.

Jujukan meningkat berterusan ditakrifkan oleh dua indeks l dan r (l < r) supaya ia adalah [nums[l], nums[l + 1], ..., nums[r - 1], nums [r]] dan bagi setiap l <= i < r, nombor[i] < nombor[i + 1].

Contoh 1:

Input: nombor = [1,3,5,4,7]
Keluaran: 3
Penjelasan: Susulan peningkatan berterusan terpanjang ialah [1,3,5] dengan panjang 3.
Walaupun [1,3,5,7] ialah urutan yang semakin meningkat, ia tidak berterusan kerana unsur 5 dan 7 dipisahkan oleh unsur
4.
Contoh 2:

Input: nombor = [2,2,2,2,2]
Keluaran: 1
Penjelasan: Susulan peningkatan berterusan terpanjang ialah [2] dengan panjang 1. Ambil perhatian bahawa ia mestilah betul-betul
semakin meningkat.

Kekangan:

1 <= nums.length <= 10^4
-10^9 <= angka[i] <= 10^9
Halaman Asal

Algoritma tamak

    public int findLengthOfLCIS(int[] nums) {
        if(nums.length < 1){
            return 0;
        }
        int res = 1;
        int cnt = 1;
        int pre = nums[0];
        for(int i=1; i<nums.length; i++){
            if(nums[i] > 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);
    }
Salin selepas log masuk

Pengaturcaraan Dinamik

Berbeza daripada soalan sebelumnya, dalam soalan ini kita hanya boleh mempertimbangkan urutan yang terus meningkat, yang memudahkan proses.

Salin selepas log masuk

Atas ialah kandungan terperinci Pengaturcaraan Dinamik Hari LeetCode Bahagian 10. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!