BM95. 分糖果问题
描述
示例1
输入:
[1,1,2]
输出:
4
说明:
最优分配方案为1,1,2示例2
输入:
[1,1,1]
输出:
3
说明:
最优分配方案是1,1,1C++ 解法, 执行用时: 12ms, 内存消耗: 2756KB, 提交时间: 2021-09-18
class Solution { public: /** * pick candy * @param arr int整型vector the array * @return int整型 */ int candy(vector<int>& arr) { // write code here if(arr.size()==1) return 1; if(arr.size()==0) return 0; vector<int> count(arr.size(),1); for(int i=1;i<arr.size();i++){ if(arr[i]>arr[i-1]){ count[i] = count[i-1]+1; } } for(int i=arr.size()-1;i>0;i--){ if(arr[i]<arr[i-1]){ count[i-1] = max(count[i]+1,count[i-1]); } } int res = 0; for(int i=0;i<count.size();i++){ res += count[i]; } return res; } };
C++ 解法, 执行用时: 12ms, 内存消耗: 2824KB, 提交时间: 2022-05-11
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * pick candy * @param arr int整型vector the array * @return int整型 */ int candy(vector<int>& arr) { // write code here if(arr.size() <= 1) return arr.size(); int len = arr.size(); vector<int> nums(len, 1); for(int i=1; i < len; i++){ if(arr[i-1] < arr[i]){ nums[i] = nums[i-1] + 1; } } int res = 0; for(int i=len-1; i > 0; i--){ if(arr[i-1] > arr[i] && nums[i-1] <= nums[i]){ nums[i-1] = nums[i] + 1; } res += nums[i]; } res += nums[0]; return res; } };
C++ 解法, 执行用时: 12ms, 内存消耗: 2828KB, 提交时间: 2022-07-25
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false);; cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * pick candy * @param arr int整型vector the array * @return int整型 */ int candy(vector<int>& arr) { // write code here 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; } };
C++ 解法, 执行用时: 12ms, 内存消耗: 2828KB, 提交时间: 2022-06-20
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * pick candy * @param arr int整型vector the array * @return int整型 */ int candy(vector<int>& arr) { int l=arr.size(); vector<int>dp(l,1); int mincandy=0; for(int i=1;i<l;i++){ if(arr[i]>arr[i-1]) dp[i]=dp[i-1]+1; } for(int i=l-2;i>=0;i--){ if(arr[i]>arr[i+1] && dp[i]<=dp[i+1]) dp[i]=dp[i+1]+1; } for(int i=0;i<l;i++){ mincandy+=dp[i]; } return mincandy; } };
C++ 解法, 执行用时: 12ms, 内存消耗: 2848KB, 提交时间: 2021-09-12
class Solution { public: /** * pick candy * @param arr int整型vector the array * @return int整型 */ int candy(vector<int>& arr) { // write code here if (arr.empty()) return 0; vector<int> left(arr.size(), 1); vector<int> right(arr.size(), 1); for (int i = 1; i < left.size(); i++) { if (arr[i] > arr[i-1]) left[i] = left[i-1]+1; } int res = left[left.size()-1]; for (int i = right.size()-2; i >= 0; i--) { if (arr[i] > arr[i+1]) right[i] = right[i+1]+1; res += max(left[i], right[i]); } return res; } };