Skip to content

Commit b866896

Browse files
authored
feat: update solutions to lc problems: No.181,462 (#3589)
1 parent 4bc5c94 commit b866896

File tree

14 files changed

+86
-270
lines changed

14 files changed

+86
-270
lines changed

solution/0100-0199/0181.Employees Earning More Than Their Managers/README.md

+14-34
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ id 是该表的主键(具有唯一值的列)。
4444
<p><strong>示例 1:</strong></p>
4545

4646
<pre>
47-
<strong>输入:</strong>
47+
<strong>输入:</strong>
4848
Employee 表:
4949
+----+-------+--------+-----------+
5050
| id | name | salary | managerId |
@@ -54,7 +54,7 @@ Employee 表:
5454
| 3 | Sam | 60000 | Null |
5555
| 4 | Max | 90000 | Null |
5656
+----+-------+--------+-----------+
57-
<strong>输出:</strong>
57+
<strong>输出:</strong>
5858
+----------+
5959
| Employee |
6060
+----------+
@@ -68,7 +68,9 @@ Employee 表:
6868

6969
<!-- solution:start -->
7070

71-
### 方法一
71+
### 方法一:自连接 + 条件筛选
72+
73+
我们可以通过自连接 `Employee` 表,找出员工的工资以及其经理的工资,然后筛选出工资比经理高的员工。
7274

7375
<!-- tabs:start -->
7476

@@ -79,44 +81,22 @@ import pandas as pd
7981

8082

8183
def find_employees(employee: pd.DataFrame) -> pd.DataFrame:
82-
df = employee.merge(right=employee, how="left", left_on="managerId", right_on="id")
83-
emp = df[df["salary_x"] > df["salary_y"]]["name_x"]
84-
85-
return pd.DataFrame({"Employee": emp})
86-
```
87-
88-
#### MySQL
89-
90-
```sql
91-
SELECT Name AS Employee
92-
FROM Employee AS Curr
93-
WHERE
94-
Salary > (
95-
SELECT Salary
96-
FROM Employee
97-
WHERE Id = Curr.ManagerId
98-
);
84+
merged = employee.merge(
85+
employee, left_on="managerId", right_on="id", suffixes=("", "_manager")
86+
)
87+
result = merged[merged["salary"] > merged["salary_manager"]][["name"]]
88+
result.columns = ["Employee"]
89+
return result
9990
```
10091

101-
<!-- tabs:end -->
102-
103-
<!-- solution:end -->
104-
105-
<!-- solution:start -->
106-
107-
### 方法二
108-
109-
<!-- tabs:start -->
110-
11192
#### MySQL
11293

11394
```sql
11495
# Write your MySQL query statement below
115-
SELECT
116-
e1.name AS Employee
96+
SELECT e1.name Employee
11797
FROM
118-
Employee AS e1
119-
JOIN Employee AS e2 ON e1.managerId = e2.id
98+
Employee e1
99+
JOIN Employee e2 ON e1.managerId = e2.id
120100
WHERE e1.salary > e2.salary;
121101
```
122102

solution/0100-0199/0181.Employees Earning More Than Their Managers/README_EN.md

+14-34
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Each row of this table indicates the ID of an employee, their name, salary, and
4343
<p><strong class="example">Example 1:</strong></p>
4444

4545
<pre>
46-
<strong>Input:</strong>
46+
<strong>Input:</strong>
4747
Employee table:
4848
+----+-------+--------+-----------+
4949
| id | name | salary | managerId |
@@ -53,7 +53,7 @@ Employee table:
5353
| 3 | Sam | 60000 | Null |
5454
| 4 | Max | 90000 | Null |
5555
+----+-------+--------+-----------+
56-
<strong>Output:</strong>
56+
<strong>Output:</strong>
5757
+----------+
5858
| Employee |
5959
+----------+
@@ -68,7 +68,9 @@ Employee table:
6868

6969
<!-- solution:start -->
7070

71-
### Solution 1
71+
### Solution 1: Self-Join + Conditional Filtering
72+
73+
We can find employees' salaries and their managers' salaries by self-joining the `Employee` table, then filter out employees whose salaries are higher than their managers' salaries.
7274

7375
<!-- tabs:start -->
7476

@@ -79,44 +81,22 @@ import pandas as pd
7981

8082

8183
def find_employees(employee: pd.DataFrame) -> pd.DataFrame:
82-
df = employee.merge(right=employee, how="left", left_on="managerId", right_on="id")
83-
emp = df[df["salary_x"] > df["salary_y"]]["name_x"]
84-
85-
return pd.DataFrame({"Employee": emp})
86-
```
87-
88-
#### MySQL
89-
90-
```sql
91-
SELECT Name AS Employee
92-
FROM Employee AS Curr
93-
WHERE
94-
Salary > (
95-
SELECT Salary
96-
FROM Employee
97-
WHERE Id = Curr.ManagerId
98-
);
84+
merged = employee.merge(
85+
employee, left_on="managerId", right_on="id", suffixes=("", "_manager")
86+
)
87+
result = merged[merged["salary"] > merged["salary_manager"]][["name"]]
88+
result.columns = ["Employee"]
89+
return result
9990
```
10091

101-
<!-- tabs:end -->
102-
103-
<!-- solution:end -->
104-
105-
<!-- solution:start -->
106-
107-
### Solution 2
108-
109-
<!-- tabs:start -->
110-
11192
#### MySQL
11293

11394
```sql
11495
# Write your MySQL query statement below
115-
SELECT
116-
e1.name AS Employee
96+
SELECT e1.name Employee
11797
FROM
118-
Employee AS e1
119-
JOIN Employee AS e2 ON e1.managerId = e2.id
98+
Employee e1
99+
JOIN Employee e2 ON e1.managerId = e2.id
120100
WHERE e1.salary > e2.salary;
121101
```
122102

solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33

44
def find_employees(employee: pd.DataFrame) -> pd.DataFrame:
5-
df = employee.merge(right=employee, how="left", left_on="managerId", right_on="id")
6-
emp = df[df["salary_x"] > df["salary_y"]]["name_x"]
7-
8-
return pd.DataFrame({"Employee": emp})
5+
merged = employee.merge(
6+
employee, left_on="managerId", right_on="id", suffixes=("", "_manager")
7+
)
8+
result = merged[merged["salary"] > merged["salary_manager"]][["name"]]
9+
result.columns = ["Employee"]
10+
return result
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
SELECT Name AS Employee
2-
FROM Employee AS Curr
3-
WHERE
4-
Salary > (
5-
SELECT Salary
6-
FROM Employee
7-
WHERE Id = Curr.ManagerId
8-
);
1+
# Write your MySQL query statement below
2+
SELECT e1.name Employee
3+
FROM
4+
Employee e1
5+
JOIN Employee e2 ON e1.managerId = e2.id
6+
WHERE e1.salary > e2.salary;

solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution2.sql

-7
This file was deleted.

solution/0400-0499/0459.Repeated Substring Pattern/README.md

-35
Original file line numberDiff line numberDiff line change
@@ -131,39 +131,4 @@ impl Solution {
131131

132132
<!-- solution:end -->
133133

134-
<!-- solution:start -->
135-
136-
### 方法二
137-
138-
<!-- tabs:start -->
139-
140-
#### TypeScript
141-
142-
```ts
143-
function repeatedSubstringPattern(s: string): boolean {
144-
const n = s.length;
145-
for (let i = 0; i < n >> 1; i++) {
146-
const len = i + 1;
147-
if (n % len !== 0) {
148-
continue;
149-
}
150-
const t = s.slice(0, len);
151-
let j: number;
152-
for (j = len; j < n; j += len) {
153-
if (s.slice(j, j + len) !== t) {
154-
break;
155-
}
156-
}
157-
if (j === n) {
158-
return true;
159-
}
160-
}
161-
return false;
162-
}
163-
```
164-
165-
<!-- tabs:end -->
166-
167-
<!-- solution:end -->
168-
169134
<!-- problem:end -->

solution/0400-0499/0459.Repeated Substring Pattern/README_EN.md

-35
Original file line numberDiff line numberDiff line change
@@ -121,39 +121,4 @@ impl Solution {
121121

122122
<!-- solution:end -->
123123

124-
<!-- solution:start -->
125-
126-
### Solution 2
127-
128-
<!-- tabs:start -->
129-
130-
#### TypeScript
131-
132-
```ts
133-
function repeatedSubstringPattern(s: string): boolean {
134-
const n = s.length;
135-
for (let i = 0; i < n >> 1; i++) {
136-
const len = i + 1;
137-
if (n % len !== 0) {
138-
continue;
139-
}
140-
const t = s.slice(0, len);
141-
let j: number;
142-
for (j = len; j < n; j += len) {
143-
if (s.slice(j, j + len) !== t) {
144-
break;
145-
}
146-
}
147-
if (j === n) {
148-
return true;
149-
}
150-
}
151-
return false;
152-
}
153-
```
154-
155-
<!-- tabs:end -->
156-
157-
<!-- solution:end -->
158-
159124
<!-- problem:end -->

solution/0400-0499/0459.Repeated Substring Pattern/Solution2.ts

-20
This file was deleted.

solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/README.md

+9-38
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,9 @@ public:
115115
sort(nums.begin(), nums.end());
116116
int k = nums[nums.size() >> 1];
117117
int ans = 0;
118-
for (int& v : nums) ans += abs(v - k);
118+
for (int& v : nums) {
119+
ans += abs(v - k);
120+
}
119121
return ans;
120122
}
121123
};
@@ -147,8 +149,8 @@ func abs(x int) int {
147149
```ts
148150
function minMoves2(nums: number[]): number {
149151
nums.sort((a, b) => a - b);
150-
const mid = nums[nums.length >> 1];
151-
return nums.reduce((r, v) => r + Math.abs(v - mid), 0);
152+
const k = nums[nums.length >> 1];
153+
return nums.reduce((r, v) => r + Math.abs(v - k), 0);
152154
}
153155
```
154156

@@ -158,12 +160,12 @@ function minMoves2(nums: number[]): number {
158160
impl Solution {
159161
pub fn min_moves2(mut nums: Vec<i32>) -> i32 {
160162
nums.sort();
161-
let mid = nums[nums.len() / 2];
162-
let mut res = 0;
163+
let k = nums[nums.len() / 2];
164+
let mut ans = 0;
163165
for num in nums.iter() {
164-
res += (num - mid).abs();
166+
ans += (num - k).abs();
165167
}
166-
res
168+
ans
167169
}
168170
}
169171
```
@@ -172,35 +174,4 @@ impl Solution {
172174

173175
<!-- solution:end -->
174176

175-
<!-- solution:start -->
176-
177-
### 方法二:排序 + 前缀和
178-
179-
如果我们不知道中位数的性质,也可以使用前缀和的方法来求解。
180-
181-
时间复杂度 $O(n\log n)$,空间复杂度 $O(n)$。
182-
183-
<!-- tabs:start -->
184-
185-
#### Python3
186-
187-
```python
188-
class Solution:
189-
def minMoves2(self, nums: List[int]) -> int:
190-
def move(i):
191-
v = nums[i]
192-
a = v * i - s[i]
193-
b = s[-1] - s[i + 1] - v * (n - i - 1)
194-
return a + b
195-
196-
nums.sort()
197-
s = [0] + list(accumulate(nums))
198-
n = len(nums)
199-
return min(move(i) for i in range(n))
200-
```
201-
202-
<!-- tabs:end -->
203-
204-
<!-- solution:end -->
205-
206177
<!-- problem:end -->

0 commit comments

Comments
 (0)