独立写出来,思路有点借鉴单调栈的思路

class Solution {
public:
    /**
     * pick candy
     * @param arr int整型vector the array
     * @return int整型
     */
    int candy(vector<int>& arr) {
      int res = 0;
      //  dp[i] 代表第i个孩子分的的糖果数
      std::vector<int> dp(arr.size(), 1);
      
      //  需要和两边的人比,这里如果比两边的都高,那么需要比旁边最高的人多1
      //  使用两次比较,一次从左到右,一次从右到左,确保每个人对应的糖果能够比旁边分低的高
      for (int i = 1; i < arr.size(); ++i) {
        if (arr[i] > arr[i - 1]) {
          dp[i] = dp[i - 1] + 1;
        }
      }
      
      for (int i = arr.size() - 2; i >= 0; --i) {
        if (arr[i] > arr[i + 1]) {
          dp[i] = std::max(dp[i], dp[i + 1] + 1);
        }
      }
      
      for (int i = 0; i < arr.size(); ++i) {
        res += dp[i];
      }
      
      return res;
    }
};