(動態規劃)最小分糖果問題

Kobe10發表於2017-02-05
  • 題目:
    有N個孩子站在一排。 每個孩子被分配一個評分值。
    
    你給這些孩子的糖果滿足以下要求:
    
         每個孩子必須有至少一個糖果。
         評分較高的孩子比他們的鄰居獲得更多的糖果。
    
    你必須給的最低糖果是什麼?

     



  • 題目分析:這個題目其實就是簡單的遍歷問題。一個打亂的陣列,每個數字都有一個特定的屬性值,相鄰兩個數字大的數字比小的數字的屬性值大。我們可以一次遍歷 搞定,不過有點繁瑣;這裡我先從左邊一次遍歷處理大的值,然後右邊遍歷一次處理大的值(類似處理小的值),這樣比較清晰。
  • 程式碼:
    class Solution {
    public:
        int candy(vector<int> &ratings) {
            int len = ratings.size();
            if (len == 1)
                return 1;
            //從左邊遍歷   升序  找到大的就加1
            vector<int> res(len, 1);
            int sum = 0;
            for (int i=0; i<len-1; i++){
                if (ratings[i+1] > ratings[i])
                    res[i+1] = res[i]+1;
            }
            //在從右邊遍歷 升序  找到大的  加1
            //兩次遍歷類似於一次遍歷兩次判斷。這樣比較清晰
            for (int j=len-1; j>0; j--){
                if (ratings[j-1] > ratings[j] && res[j-1]<=res[j])
                    res[j-1] = res[j]+1;
            }
            
            for (int i=0; i<len; i++){
                sum += res[i];
            }
            return sum;
        }
    };

     

相關文章