【Leetcode】1250. Check If It Is a Good Array

该博客讨论了如何解决LeetCode上的一个问题,即判断一个数组是否为“好数组”。好数组的定义是数组中是否存在子集,它们的元素乘积的最大公约数为1。通过使用欧几里得算法计算数组元素的最大公约数,可以确定数组是否满足条件。博客提供了详细的算法实现和时间复杂度分析。
摘要由CSDN通过智能技术生成

题目地址:

https://leetcode.com/problems/check-if-it-is-a-good-array/description/

给定一个长 n n n数组 A A A,其数为 x 1 ∼ n x_{1\sim n} x1n,问是否 ∃ x 1 , x 2 , . . . , x k ∈ A , s . t . ∃ c 1 , . . . , c k ∈ Z , ∑ i = 1 k c i x i = 1 \exist x_1,x_2,...,x_k\in A, s.t. \exist c_1,...,c_k\in \mathbb{Z}, \sum_{i=1}^k c_ix_i=1 x1,x2,...,xkA,s.t.∃c1,...,ckZ,i=1kcixi=1

∃ c 1 , . . . , c k ∈ Z , ∑ i = 1 k c i x i = 1 \exist c_1,...,c_k\in \mathbb{Z}, \sum_{i=1}^k c_ix_i=1 c1,...,ckZ,i=1kcixi=1等价于 gcd ⁡ { x 1 , . . . , x k } = 1 \gcd\{x_1,...,x_k\}=1 gcd{x1,...,xk}=1,而其能推出 gcd ⁡ { x 1 , . . . , x n } = 1 \gcd\{x_1,...,x_n\}=1 gcd{x1,...,xn}=1。如果 gcd ⁡ { x 1 , . . . , x n } = 1 \gcd\{x_1,...,x_n\}=1 gcd{x1,...,xn}=1那显然满足条件。所以只需要 gcd ⁡ { x 1 , . . . , x n } = 1 \gcd\{x_1,...,x_n\}=1 gcd{x1,...,xn}=1即可。求最大公约数可以用欧几里得算法。代码如下:

class Solution {
 public:
  bool isGoodArray(vector<int>& nums) {
    int x = nums[0];
    for (int a : nums) {
      x = gcd(x, a);
      if (x == 1) return true;
    }

    return false;
  }

  int gcd(int a, int b) {
    return b ? gcd(b, a % b) : a;
  }
};

时间复杂度 O ( ∑ i log ⁡ A i ) O(\sum_i \log A_i) O(ilogAi),空间 O ( 1 ) O(1) O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值