LeetCode 2167 - Minimum Time to Remove All Cars Containing Illegal Goods 解題心得( 題目 )

解題概念:DP

解題方法:這題首先試試greedy,雖然看似可以,但是有時得到的不是最佳解。我們定義dp[i]表示在i之前由左邊或中間管理,可以列出下列轉移式:

dp[i]=min(dp[i]+中間費用,i)

其中有兩種選擇,一種是拿中間,一種是直接從左邊拿到右邊。

最後枚舉所有從右邊到達的終點,每個解是dp[i]+n-i,從這裡面找最好的解。

Java參考程式碼(有更好解法可在下方留言,謝謝!):

//Date:2022/02/09

//Author:En Chi Tsung(欉恩祁)

class Solution {

    int[] dp=new int[200005];

    int min=1<<30;

     public int minimumTime(String s) {

        final int n=s.length();

        for(int i=0;i<n;i++) {

            if(s.charAt(i)=='0') {

                dp[i+1]=Math.min(dp[i],i+1);

            }

            else {

                dp[i+1]=Math.min(dp[i]+2,i+1);

            }

        }

        for(int i=1;i<=n;i++) {

            min=Math.min(dp[i]+n-i,min);

        }

        return min;

    }

}

 

 

 

 

 

 

 

文章標籤
全站熱搜
創作者介紹
創作者 En Chi Tsung 的頭像
En Chi Tsung

阿祁的部落格

En Chi Tsung 發表在 痞客邦 留言(0) 人氣(7)