看起来是上升(非严格)子序列和下降子序列问题。不过直接暴力。 例如,输入[3,1,2,5,2,4] 填满雨水后变成 [3, 3, 3, 5, 4, 4] 所以只要找到最大值,最大值左边都非下降,右边的非上升。 if(arr[i]<arr[i-1]){ // 左边 res += (arr[i-1]-arr[i]); arr[i] = arr[i-1]; } .... if(arr[i]<arr[i+1]){ // 右边 res += (arr[i+1]-arr[i]); arr[i] = arr[i+1]; } 注意答案要用long long 完整代码: cl...