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 8cbbd41

Browse files
feat: add solutions to lc problems: No.0506,0507 (#3823)
1 parent dc28c6d commit 8cbbd41

File tree

12 files changed

+215
-65
lines changed

12 files changed

+215
-65
lines changed

‎solution/0500-0599/0506.Relative Ranks/README.md‎

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,13 @@ tags:
6565

6666
<!-- solution:start -->
6767

68-
### 方法一
68+
### 方法一:排序
69+
70+
我们使用一个数组 $\textit{idx}$ 存储 0ドル$ 到 $n-1$ 的下标,然后对 $\textit{idx}$ 进行排序,排序规则为:按照 $\textit{score}$ 的值从大到小排序。
71+
72+
然后我们定义一个数组 $\textit{top3} = [\text{Gold Medal}, \text{Silver Medal}, \text{Bronze Medal}],ドル遍历 $\textit{idx},ドル对于每个下标 $j,ドル如果 $j$ 小于 3ドル,ドル则 $\textit{ans}[j]$ 为 $\textit{top3}[j],ドル否则为 $j+1$。
73+
74+
时间复杂度 $O(n \times \log n),ドル空间复杂度 $O(n)$。其中 $n$ 为数组 $\textit{score}$ 的长度。
6975

7076
<!-- tabs:start -->
7177

@@ -77,10 +83,10 @@ class Solution:
7783
n = len(score)
7884
idx = list(range(n))
7985
idx.sort(key=lambda x: -score[x])
80-
top3 = ['Gold Medal', 'Silver Medal', 'Bronze Medal']
86+
top3 = ["Gold Medal", "Silver Medal", "Bronze Medal"]
8187
ans = [None] * n
82-
for iin range(n):
83-
ans[idx[i]] = top3[i] if i < 3 else str(i + 1)
88+
for i, j in enumerate(idx):
89+
ans[j] = top3[i] if i < 3 else str(i + 1)
8490
return ans
8591
```
8692

@@ -112,15 +118,16 @@ class Solution {
112118
public:
113119
vector<string> findRelativeRanks(vector<int>& score) {
114120
int n = score.size();
115-
vector<pair<int, int>> idx;
116-
for (int i = 0; i < n; ++i)
117-
idx.push_back(make_pair(score[i], i));
118-
sort(idx.begin(), idx.end(),
119-
[&](const pair<int, int>& x, const pair<int, int>& y) { return x.first > y.first; });
121+
vector<int> idx(n);
122+
iota(idx.begin(), idx.end(), 0);
123+
sort(idx.begin(), idx.end(), [&score](int a, int b) {
124+
return score[a] > score[b];
125+
});
120126
vector<string> ans(n);
121127
vector<string> top3 = {"Gold Medal", "Silver Medal", "Bronze Medal"};
122-
for (int i = 0; i < n; ++i)
123-
ans[idx[i].second] = i < 3 ? top3[i] : to_string(i + 1);
128+
for (int i = 0; i < n; ++i) {
129+
ans[idx[i]] = i < 3 ? top3[i] : to_string(i + 1);
130+
}
124131
return ans;
125132
}
126133
};
@@ -151,6 +158,26 @@ func findRelativeRanks(score []int) []string {
151158
}
152159
```
153160

161+
#### TypeScript
162+
163+
```ts
164+
function findRelativeRanks(score: number[]): string[] {
165+
const n = score.length;
166+
const idx = Array.from({ length: n }, (_, i) => i);
167+
idx.sort((a, b) => score[b] - score[a]);
168+
const top3 = ['Gold Medal', 'Silver Medal', 'Bronze Medal'];
169+
const ans: string[] = Array(n);
170+
for (let i = 0; i < n; i++) {
171+
if (i < 3) {
172+
ans[idx[i]] = top3[i];
173+
} else {
174+
ans[idx[i]] = (i + 1).toString();
175+
}
176+
}
177+
return ans;
178+
}
179+
```
180+
154181
<!-- tabs:end -->
155182

156183
<!-- solution:end -->

‎solution/0500-0599/0506.Relative Ranks/README_EN.md‎

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,13 @@ tags:
6464

6565
<!-- solution:start -->
6666

67-
### Solution 1
67+
### Solution 1: Sorting
68+
69+
We use an array $\textit{idx}$ to store the indices from 0ドル$ to $n-1,ドル then sort $\textit{idx}$ based on the values in $\textit{score}$ in descending order.
70+
71+
Next, we define an array $\textit{top3} = [\text{Gold Medal}, \text{Silver Medal}, \text{Bronze Medal}]$. We traverse $\textit{idx},ドル and for each index $j,ドル if $j$ is less than 3ドル,ドル then $\textit{ans}[j]$ is $\textit{top3}[j]$; otherwise, it is $j+1$.
72+
73+
The time complexity is $O(n \times \log n),ドル and the space complexity is $O(n)$. Here, $n$ is the length of the array $\textit{score}$.
6874

6975
<!-- tabs:start -->
7076

@@ -76,10 +82,10 @@ class Solution:
7682
n = len(score)
7783
idx = list(range(n))
7884
idx.sort(key=lambda x: -score[x])
79-
top3 = ['Gold Medal', 'Silver Medal', 'Bronze Medal']
85+
top3 = ["Gold Medal", "Silver Medal", "Bronze Medal"]
8086
ans = [None] * n
81-
for iin range(n):
82-
ans[idx[i]] = top3[i] if i < 3 else str(i + 1)
87+
for i, j in enumerate(idx):
88+
ans[j] = top3[i] if i < 3 else str(i + 1)
8389
return ans
8490
```
8591

@@ -111,15 +117,16 @@ class Solution {
111117
public:
112118
vector<string> findRelativeRanks(vector<int>& score) {
113119
int n = score.size();
114-
vector<pair<int, int>> idx;
115-
for (int i = 0; i < n; ++i)
116-
idx.push_back(make_pair(score[i], i));
117-
sort(idx.begin(), idx.end(),
118-
[&](const pair<int, int>& x, const pair<int, int>& y) { return x.first > y.first; });
120+
vector<int> idx(n);
121+
iota(idx.begin(), idx.end(), 0);
122+
sort(idx.begin(), idx.end(), [&score](int a, int b) {
123+
return score[a] > score[b];
124+
});
119125
vector<string> ans(n);
120126
vector<string> top3 = {"Gold Medal", "Silver Medal", "Bronze Medal"};
121-
for (int i = 0; i < n; ++i)
122-
ans[idx[i].second] = i < 3 ? top3[i] : to_string(i + 1);
127+
for (int i = 0; i < n; ++i) {
128+
ans[idx[i]] = i < 3 ? top3[i] : to_string(i + 1);
129+
}
123130
return ans;
124131
}
125132
};
@@ -150,6 +157,26 @@ func findRelativeRanks(score []int) []string {
150157
}
151158
```
152159

160+
#### TypeScript
161+
162+
```ts
163+
function findRelativeRanks(score: number[]): string[] {
164+
const n = score.length;
165+
const idx = Array.from({ length: n }, (_, i) => i);
166+
idx.sort((a, b) => score[b] - score[a]);
167+
const top3 = ['Gold Medal', 'Silver Medal', 'Bronze Medal'];
168+
const ans: string[] = Array(n);
169+
for (let i = 0; i < n; i++) {
170+
if (i < 3) {
171+
ans[idx[i]] = top3[i];
172+
} else {
173+
ans[idx[i]] = (i + 1).toString();
174+
}
175+
}
176+
return ans;
177+
}
178+
```
179+
153180
<!-- tabs:end -->
154181

155182
<!-- solution:end -->

‎solution/0500-0599/0506.Relative Ranks/Solution.cpp‎

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@ class Solution {
22
public:
33
vector<string> findRelativeRanks(vector<int>& score) {
44
int n = score.size();
5-
vector<pair<int, int>> idx;
6-
for (int i = 0; i < n; ++i)
7-
idx.push_back(make_pair(score[i], i));
8-
sort(idx.begin(), idx.end(),
9-
[&](const pair<int, int>& x, const pair<int, int>& y) { return x.first > y.first; });
5+
vector<int> idx(n);
6+
iota(idx.begin(), idx.end(), 0);
7+
sort(idx.begin(), idx.end(), [&score](int a, int b) {
8+
return score[a] > score[b];
9+
});
1010
vector<string> ans(n);
1111
vector<string> top3 = {"Gold Medal", "Silver Medal", "Bronze Medal"};
12-
for (int i = 0; i < n; ++i)
13-
ans[idx[i].second] = i < 3 ? top3[i] : to_string(i + 1);
12+
for (int i = 0; i < n; ++i) {
13+
ans[idx[i]] = i < 3 ? top3[i] : to_string(i + 1);
14+
}
1415
return ans;
1516
}
16-
};
17+
};

‎solution/0500-0599/0506.Relative Ranks/Solution.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ def findRelativeRanks(self, score: List[int]) -> List[str]:
33
n = len(score)
44
idx = list(range(n))
55
idx.sort(key=lambda x: -score[x])
6-
top3 = ['Gold Medal', 'Silver Medal', 'Bronze Medal']
6+
top3 = ["Gold Medal", "Silver Medal", "Bronze Medal"]
77
ans = [None] * n
8-
for iin range(n):
9-
ans[idx[i]] = top3[i] if i < 3 else str(i + 1)
8+
for i, jin enumerate(idx):
9+
ans[j] = top3[i] if i < 3 else str(i + 1)
1010
return ans
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
function findRelativeRanks(score: number[]): string[] {
2+
const n = score.length;
3+
const idx = Array.from({ length: n }, (_, i) => i);
4+
idx.sort((a, b) => score[b] - score[a]);
5+
const top3 = ['Gold Medal', 'Silver Medal', 'Bronze Medal'];
6+
const ans: string[] = Array(n);
7+
for (let i = 0; i < n; i++) {
8+
if (i < 3) {
9+
ans[idx[i]] = top3[i];
10+
} else {
11+
ans[idx[i]] = (i + 1).toString();
12+
}
13+
}
14+
return ans;
15+
}

‎solution/0500-0599/0507.Perfect Number/README.md‎

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,15 @@ tags:
5151

5252
<!-- solution:start -->
5353

54-
### 方法一
54+
### 方法一:枚举
55+
56+
我们首先判断 $\textit{num}$ 是否为 1,如果为 1,则 $\textit{num}$ 不是完美数,返回 $\text{false}$。
57+
58+
然后,我们从 2 开始枚举 $\textit{num}$ 的所有正因子,如果 $\textit{num}$ 能被 $\textit{num}$ 的某个正因子 $i$ 整除,那么我们将 $i$ 加入到答案 $\textit{s}$ 中。如果 $\textit{num}$ 除以 $i$ 得到的商不等于 $i,ドル我们也将 $\textit{num}$ 除以 $i$ 得到的商加入到答案 $\textit{s}$ 中。
59+
60+
最后,我们判断 $\textit{s}$ 是否等于 $\textit{num}$ 即可。
61+
62+
时间复杂度 $O(\sqrt{n}),ドル其中 $n$ 为 $\textit{num}$ 的大小。空间复杂度 $O(1)$。
5563

5664
<!-- tabs:start -->
5765

@@ -63,7 +71,7 @@ class Solution:
6371
if num == 1:
6472
return False
6573
s, i = 1, 2
66-
while i * i <= num:
74+
while i <= num// i:
6775
if num % i == 0:
6876
s += i
6977
if i != num // i:
@@ -76,13 +84,12 @@ class Solution:
7684

7785
```java
7886
class Solution {
79-
8087
public boolean checkPerfectNumber(int num) {
8188
if (num == 1) {
8289
return false;
8390
}
8491
int s = 1;
85-
for (int i = 2; i * i <= num; ++i) {
92+
for (int i = 2; i <= num/ i; ++i) {
8693
if (num % i == 0) {
8794
s += i;
8895
if (i != num / i) {
@@ -101,12 +108,16 @@ class Solution {
101108
class Solution {
102109
public:
103110
bool checkPerfectNumber(int num) {
104-
if (num == 1) return false;
111+
if (num == 1) {
112+
return false;
113+
}
105114
int s = 1;
106-
for (int i = 2; i * i <= num; ++i) {
115+
for (int i = 2; i <= num / i; ++i) {
107116
if (num % i == 0) {
108117
s += i;
109-
if (i != num / i) s += num / i;
118+
if (i != num / i) {
119+
s += num / i;
120+
}
110121
}
111122
}
112123
return s == num;
@@ -122,18 +133,38 @@ func checkPerfectNumber(num int) bool {
122133
return false
123134
}
124135
s := 1
125-
for i := 2; i*i <= num; i++ {
136+
for i := 2; i <= num/i; i++ {
126137
if num%i == 0 {
127138
s += i
128-
if i != num/i {
129-
s += num / i
139+
if j := num / i; i != j {
140+
s += j
130141
}
131142
}
132143
}
133144
return s == num
134145
}
135146
```
136147

148+
#### TypeScript
149+
150+
```ts
151+
function checkPerfectNumber(num: number): boolean {
152+
if (num <= 1) {
153+
return false;
154+
}
155+
let s = 1;
156+
for (let i = 2; i <= num / i; ++i) {
157+
if (num % i === 0) {
158+
s += i;
159+
if (i * i !== num) {
160+
s += num / i;
161+
}
162+
}
163+
}
164+
return s === num;
165+
}
166+
```
167+
137168
<!-- tabs:end -->
138169

139170
<!-- solution:end -->

0 commit comments

Comments
(0)

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