刷題-力扣-1646. 獲取生成陣列中的最大值
阿新 • • 發佈:2021-08-23
1646. 獲取生成陣列中的最大值
題目連結
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/get-maximum-in-generated-array
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
題目描述
給你一個整數 n 。按下述規則生成一個長度為 n + 1 的陣列 nums :
nums[0] = 0
nums[1] = 1
當 2 <= 2 * i <= n 時,nums[2 * i] = nums[i]
當 2 <= 2 * i + 1 <= n 時,nums[2 * i + 1] = nums[i] + nums[i + 1]
返回生成陣列 nums 中的 最大 值。
示例 1:
輸入:n = 7 輸出:3 解釋:根據規則: nums[0] = 0 nums[1] = 1 nums[(1 * 2) = 2] = nums[1] = 1 nums[(1 * 2) + 1 = 3] = nums[1] + nums[2] = 1 + 1 = 2 nums[(2 * 2) = 4] = nums[2] = 1 nums[(2 * 2) + 1 = 5] = nums[2] + nums[3] = 1 + 2 = 3 nums[(3 * 2) = 6] = nums[3] = 2 nums[(3 * 2) + 1 = 7] = nums[3] + nums[4] = 2 + 1 = 3 因此,nums = [0,1,1,2,1,3,2,3],最大值 3
示例 2:
輸入:n = 2
輸出:1
解釋:根據規則,nums[0]、nums[1] 和 nums[2] 之中的最大值是 1
示例 3:
輸入:n = 3
輸出:2
解釋:根據規則,nums[0]、nums[1]、nums[2] 和 nums[3] 之中的最大值是 2
提示:
- 0 <= n <= 100
題目分析
- 根據題目描述按照規則生成陣列,並獲取陣列中最大值
- 模擬規則生成陣列,再遍歷陣列
- nums[i] = nums[i / 2] + i % 2 * nums[i / 2 + 1]
程式碼
class Solution { public: int getMaximumGenerated(int n) { if (!n) return 0; vector<int> nums(n + 1); nums[0] = 0; nums[1] = 1; for (int i = 2; i < n + 1; ++i) { nums[i] = nums[i / 2] + i % 2 * nums[i / 2 + 1]; } int max = nums[0]; for (auto it = nums.cbegin(); it != nums.cend(); ++it) { max = max > *it ? max : *it; } return max; } }; class Solution { public: int getMaximumGenerated(int n) { if (!n) return 0; vector<int> nums(n + 1); nums[0] = 0; nums[1] = 1; for (int i = 2; i < n + 1; ++i) { nums[i] = nums[i / 2] + i % 2 * nums[i / 2 + 1]; } int max = nums[0]; for (auto it = nums.cbegin(); it != nums.cend(); ++it) { max = max > *it ? max : *it; } return max; } };