File tree Expand file tree Collapse file tree 6 files changed +148
-2
lines changed
solution/1200-1299/1250.Check If It Is a Good Array Expand file tree Collapse file tree 6 files changed +148
-2
lines changed Original file line number Diff line number Diff line change 47
47
48
48
<!-- 这里可写通用的实现逻辑 -->
49
49
50
+ ** 方法一:数学(裴蜀定理)**
51
+
52
+ 我们可以考虑选取两个数的情况,若选取的数是 $a$ 和 $b$,那么根据题目的要求,我们需要满足 $a \times x + b \times y = 1$,其中 $x$ 和 $y$ 是任意整数。
53
+
54
+ 而根据裴蜀定理,可以得知,如果 $a$ 和 $b$ 互质,那么上述等式一定有解。
55
+
56
+ 因此,我们只需要判断在数组 ` nums ` 中是否存在两个互质的数即可。两个数互质的充要条件是它们的最大公约数为 $1$。如果数组 ` nums ` 存在 $a$ 和 $b$ 的最大公约数为 $1$,那么数组 ` nums ` 中的所有数的最大公约数也为 $1$。所以我们将题目转化为:判断数组 ` nums ` 中的所有数的最大公约数是否为 $1$ 即可。
57
+
58
+ 时间复杂度 $O(n + log m)$,空间复杂度 $O(1)$,其中 $n$ 是数组 ` nums ` 的长度,而 $m$ 是数组 ` nums ` 中的最大值。
59
+
50
60
<!-- tabs:start -->
51
61
52
62
### ** Python3**
53
63
54
64
<!-- 这里可写当前语言的特殊实现逻辑 -->
55
65
56
66
``` python
57
-
67
+ class Solution :
68
+ def isGoodArray (self , nums : List[int ]) -> bool :
69
+ return reduce (gcd, nums) == 1
58
70
```
59
71
60
72
### ** Java**
61
73
62
74
<!-- 这里可写当前语言的特殊实现逻辑 -->
63
75
64
76
``` java
77
+ class Solution {
78
+ public boolean isGoodArray (int [] nums ) {
79
+ int g = 0 ;
80
+ for (int x : nums) {
81
+ g = gcd(x, g);
82
+ }
83
+ return g == 1 ;
84
+ }
85
+
86
+ private int gcd (int a , int b ) {
87
+ return b == 0 ? a : gcd(b, a % b);
88
+ }
89
+ }
90
+ ```
91
+
92
+ ### ** C++**
93
+
94
+ ``` cpp
95
+ class Solution {
96
+ public:
97
+ bool isGoodArray(vector<int >& nums) {
98
+ int g = 0;
99
+ for (int x : nums) {
100
+ g = gcd(x, g);
101
+ }
102
+ return g == 1;
103
+ }
104
+ };
105
+ ```
65
106
107
+ ### **Go**
108
+
109
+ ```go
110
+ func isGoodArray(nums []int) bool {
111
+ g := 0
112
+ for _, x := range nums {
113
+ g = gcd(x, g)
114
+ }
115
+ return g == 1
116
+ }
117
+
118
+ func gcd(a, b int) int {
119
+ if b == 0 {
120
+ return a
121
+ }
122
+ return gcd(b, a%b)
123
+ }
66
124
```
67
125
68
126
### ** ...**
Original file line number Diff line number Diff line change 49
49
### ** Python3**
50
50
51
51
``` python
52
-
52
+ class Solution :
53
+ def isGoodArray (self , nums : List[int ]) -> bool :
54
+ return reduce (gcd, nums) == 1
53
55
```
54
56
55
57
### ** Java**
56
58
57
59
``` java
60
+ class Solution {
61
+ public boolean isGoodArray (int [] nums ) {
62
+ int g = 0 ;
63
+ for (int x : nums) {
64
+ g = gcd(x, g);
65
+ }
66
+ return g == 1 ;
67
+ }
68
+
69
+ private int gcd (int a , int b ) {
70
+ return b == 0 ? a : gcd(b, a % b);
71
+ }
72
+ }
73
+ ```
74
+
75
+ ### ** C++**
76
+
77
+ ``` cpp
78
+ class Solution {
79
+ public:
80
+ bool isGoodArray(vector<int >& nums) {
81
+ int g = 0;
82
+ for (int x : nums) {
83
+ g = gcd(x, g);
84
+ }
85
+ return g == 1;
86
+ }
87
+ };
88
+ ```
58
89
90
+ ### **Go**
91
+
92
+ ```go
93
+ func isGoodArray(nums []int) bool {
94
+ g := 0
95
+ for _, x := range nums {
96
+ g = gcd(x, g)
97
+ }
98
+ return g == 1
99
+ }
100
+
101
+ func gcd(a, b int) int {
102
+ if b == 0 {
103
+ return a
104
+ }
105
+ return gcd(b, a%b)
106
+ }
59
107
```
60
108
61
109
### ** ...**
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ bool isGoodArray (vector<int >& nums) {
4
+ int g = 0 ;
5
+ for (int x : nums) {
6
+ g = gcd (x, g);
7
+ }
8
+ return g == 1 ;
9
+ }
10
+ };
Original file line number Diff line number Diff line change
1
+ func isGoodArray (nums []int ) bool {
2
+ g := 0
3
+ for _ , x := range nums {
4
+ g = gcd (x , g )
5
+ }
6
+ return g == 1
7
+ }
8
+
9
+ func gcd (a , b int ) int {
10
+ if b == 0 {
11
+ return a
12
+ }
13
+ return gcd (b , a % b )
14
+ }
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public boolean isGoodArray (int [] nums ) {
3
+ int g = 0 ;
4
+ for (int x : nums ) {
5
+ g = gcd (x , g );
6
+ }
7
+ return g == 1 ;
8
+ }
9
+
10
+ private int gcd (int a , int b ) {
11
+ return b == 0 ? a : gcd (b , a % b );
12
+ }
13
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def isGoodArray (self , nums : List [int ]) -> bool :
3
+ return reduce (gcd , nums ) == 1
You can’t perform that action at this time.
0 commit comments