Skip to content

Commit acf860e

Browse files
committed
feat: add solutions to lc problem: No.1979
No.1979.Find Greatest Common Divisor of Array
1 parent f2ca206 commit acf860e

File tree

6 files changed

+104
-87
lines changed

6 files changed

+104
-87
lines changed

solution/1900-1999/1979.Find Greatest Common Divisor of Array/README.md

+38-32
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,11 @@ nums 中最大的数是 3
5555

5656
<!-- 这里可写通用的实现逻辑 -->
5757

58-
最大公约数算法:
58+
**方法一:模拟**
5959

60-
```java
61-
int gcd(int a, int b) {
62-
return b > 0 ? gcd(b, a % b) : a;
63-
}
64-
```
60+
根据题意模拟即可,即先找出数组 `nums` 中的最大值和最小值,然后求最大值和最小值的最大公约数。
61+
62+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 `nums` 的长度。
6563

6664
<!-- tabs:start -->
6765

@@ -83,15 +81,15 @@ class Solution:
8381
class Solution {
8482
public int findGCD(int[] nums) {
8583
int a = 1, b = 1000;
86-
for (int num : nums) {
87-
a = Math.max(a, num);
88-
b = Math.min(b, num);
84+
for (int x : nums) {
85+
a = Math.max(a, x);
86+
b = Math.min(b, x);
8987
}
9088
return gcd(a, b);
9189
}
9290

9391
private int gcd(int a, int b) {
94-
return b > 0 ? gcd(b, a % b) : a;
92+
return b == 0 ? a : gcd(b, a % b);
9593
}
9694
}
9795
```
@@ -102,11 +100,8 @@ class Solution {
102100
class Solution {
103101
public:
104102
int findGCD(vector<int>& nums) {
105-
int a = 0, b = 1000;
106-
for (int num : nums) {
107-
a = max(a, num);
108-
b = min(b, num);
109-
}
103+
int a = *max_element(nums.begin(), nums.end());
104+
int b = *min_element(nums.begin(), nums.end());
110105
return gcd(a, b);
111106
}
112107
};
@@ -116,33 +111,44 @@ public:
116111
117112
```go
118113
func findGCD(nums []int) int {
119-
a, b := 0, 1000
120-
for _, num := range nums {
121-
a = max(a, num)
122-
b = min(b, num)
114+
a, b := 1, 1000
115+
for _, x := range nums {
116+
if a < x {
117+
a = x
118+
}
119+
if b > x {
120+
b = x
121+
}
123122
}
124123
return gcd(a, b)
125124
}
126125
127126
func gcd(a, b int) int {
128-
if b > 0 {
129-
return gcd(b, a%b)
127+
if b == 0 {
128+
return a
130129
}
131-
return a
130+
return gcd(b, a%b)
132131
}
132+
```
133133

134-
func max(a, b int) int {
135-
if a > b {
136-
return a
137-
}
138-
return b
134+
### **TypeScript**
135+
136+
```ts
137+
function findGCD(nums: number[]): number {
138+
let a = 1;
139+
let b = 1000;
140+
for (const x of nums) {
141+
a = Math.max(a, x);
142+
b = Math.min(b, x);
143+
}
144+
return gcd(a, b);
139145
}
140146

141-
func min(a, b int) int {
142-
if a < b {
143-
return a
144-
}
145-
return b
147+
function gcd(a: number, b: number): number {
148+
if (b == 0) {
149+
return a;
150+
}
151+
return gcd(b, a % b);
146152
}
147153
```
148154

solution/1900-1999/1979.Find Greatest Common Divisor of Array/README_EN.md

+34-26
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,15 @@ class Solution:
6868
class Solution {
6969
public int findGCD(int[] nums) {
7070
int a = 1, b = 1000;
71-
for (int num : nums) {
72-
a = Math.max(a, num);
73-
b = Math.min(b, num);
71+
for (int x : nums) {
72+
a = Math.max(a, x);
73+
b = Math.min(b, x);
7474
}
7575
return gcd(a, b);
7676
}
7777

7878
private int gcd(int a, int b) {
79-
return b > 0 ? gcd(b, a % b) : a;
79+
return b == 0 ? a : gcd(b, a % b);
8080
}
8181
}
8282
```
@@ -87,11 +87,8 @@ class Solution {
8787
class Solution {
8888
public:
8989
int findGCD(vector<int>& nums) {
90-
int a = 0, b = 1000;
91-
for (int num : nums) {
92-
a = max(a, num);
93-
b = min(b, num);
94-
}
90+
int a = *max_element(nums.begin(), nums.end());
91+
int b = *min_element(nums.begin(), nums.end());
9592
return gcd(a, b);
9693
}
9794
};
@@ -101,33 +98,44 @@ public:
10198
10299
```go
103100
func findGCD(nums []int) int {
104-
a, b := 0, 1000
105-
for _, num := range nums {
106-
a = max(a, num)
107-
b = min(b, num)
101+
a, b := 1, 1000
102+
for _, x := range nums {
103+
if a < x {
104+
a = x
105+
}
106+
if b > x {
107+
b = x
108+
}
108109
}
109110
return gcd(a, b)
110111
}
111112
112113
func gcd(a, b int) int {
113-
if b > 0 {
114-
return gcd(b, a%b)
114+
if b == 0 {
115+
return a
115116
}
116-
return a
117+
return gcd(b, a%b)
117118
}
119+
```
118120

119-
func max(a, b int) int {
120-
if a > b {
121-
return a
122-
}
123-
return b
121+
### **TypeScript**
122+
123+
```ts
124+
function findGCD(nums: number[]): number {
125+
let a = 1;
126+
let b = 1000;
127+
for (const x of nums) {
128+
a = Math.max(a, x);
129+
b = Math.min(b, x);
130+
}
131+
return gcd(a, b);
124132
}
125133

126-
func min(a, b int) int {
127-
if a < b {
128-
return a
129-
}
130-
return b
134+
function gcd(a: number, b: number): number {
135+
if (b == 0) {
136+
return a;
137+
}
138+
return gcd(b, a % b);
131139
}
132140
```
133141

Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
class Solution {
22
public:
33
int findGCD(vector<int>& nums) {
4-
int a = 0, b = 1000;
5-
for (int num : nums) {
6-
a = max(a, num);
7-
b = min(b, num);
8-
}
4+
int a = *max_element(nums.begin(), nums.end());
5+
int b = *min_element(nums.begin(), nums.end());
96
return gcd(a, b);
107
}
118
};
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,19 @@
11
func findGCD(nums []int) int {
2-
a, b := 0, 1000
3-
for _, num := range nums {
4-
a = max(a, num)
5-
b = min(b, num)
2+
a, b := 1, 1000
3+
for _, x := range nums {
4+
if a < x {
5+
a = x
6+
}
7+
if b > x {
8+
b = x
9+
}
610
}
711
return gcd(a, b)
812
}
913

1014
func gcd(a, b int) int {
11-
if b > 0 {
12-
return gcd(b, a%b)
13-
}
14-
return a
15-
}
16-
17-
func max(a, b int) int {
18-
if a > b {
19-
return a
20-
}
21-
return b
22-
}
23-
24-
func min(a, b int) int {
25-
if a < b {
15+
if b == 0 {
2616
return a
2717
}
28-
return b
18+
return gcd(b, a%b)
2919
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
class Solution {
22
public int findGCD(int[] nums) {
33
int a = 1, b = 1000;
4-
for (int num : nums) {
5-
a = Math.max(a, num);
6-
b = Math.min(b, num);
4+
for (int x : nums) {
5+
a = Math.max(a, x);
6+
b = Math.min(b, x);
77
}
88
return gcd(a, b);
99
}
1010

1111
private int gcd(int a, int b) {
12-
return b > 0 ? gcd(b, a % b) : a;
12+
return b == 0 ? a : gcd(b, a % b);
1313
}
1414
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function findGCD(nums: number[]): number {
2+
let a = 1;
3+
let b = 1000;
4+
for (const x of nums) {
5+
a = Math.max(a, x);
6+
b = Math.min(b, x);
7+
}
8+
return gcd(a, b);
9+
}
10+
11+
function gcd(a: number, b: number): number {
12+
if (b == 0) {
13+
return a;
14+
}
15+
return gcd(b, a % b);
16+
}

0 commit comments

Comments
 (0)