1. 程式人生 > 其它 >刷題-力扣-1646. 獲取生成陣列中的最大值

刷題-力扣-1646. 獲取生成陣列中的最大值

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

題目分析

  1. 根據題目描述按照規則生成陣列,並獲取陣列中最大值
  2. 模擬規則生成陣列,再遍歷陣列
  3. 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;
    }
};