class Solution {
public:
    int candy(vector<int>& arr) {
        //记录每个位置的糖果数,初始为1
        vector<int> nums(arr.size(), 1); 
        //从左到右遍历
        for(int i = 1; i < arr.size(); i++){ 
            //如果右边在递增,每次增加一个
            if(arr[i] > arr[i - 1]) 
                nums[i] = nums[i - 1] + 1; 
        }
        //记录总糖果数
        int res = nums[arr.size() - 1]; 
        //从右到左遍历
        for(int i = arr.size() - 2; i >= 0; i--){ 
            //如果左边更大但是糖果数更小
            if(arr[i] > arr[i + 1] && nums[i] <= nums[i + 1]) 
                nums[i] = nums[i + 1] + 1; 
            //累加和
            res += nums[i]; 
        }
        return res;
    }
};

// 思路感觉没错呀,错了错了,因为最小值可能有多个,而且这多个的最小值可能分布在不同相邻下标
// 所以不能用以下解法
// #include <numeric>
// #include <vector>
// class Solution {
// public:
//     /**
//      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
//      *
//      * pick candy
//      * @param arr int整型vector the array
//      * @return int整型
//      */
//     int candy(vector<int>& arr) {
//         // write code here
//         // 找到arr中的最小值位置
//         int index = min_element(arr.begin(),arr.end())-arr.begin();
        
//         int left = index-1, right = index+1;

//         vector<int> temp(arr.size(),1);

//         while(left>=0)
//         {
//             if(arr[left]==arr[left+1])
//                 temp[left] = temp[left+1];
//             else if(arr[left]>arr[left+1])
//                 temp[left] = temp[left+1]+1;
//             else
//                 temp[left] = temp[left+1]-1;

//             --left;
//         }

//         while(right<arr.size())
//         {
//             if(arr[right]==arr[right-1])
//                 temp[right] = temp[right-1];
//             else if(arr[right]>arr[right-1])
//                 temp[right] = temp[right-1]+1;
//             else
//                 temp[right] = temp[right-1]-1;

//             ++right;
//         }

//         int ans = accumulate(temp.begin(), temp.end(), 0);
        
//         return ans;
//     }
// };