Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 38 additions & 32 deletions
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‎

Lines changed: 34 additions & 26 deletions
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

Lines changed: 2 additions & 5 deletions
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
};
Lines changed: 10 additions & 20 deletions
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
}
Lines changed: 4 additions & 4 deletions
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
}
Lines changed: 16 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /