Skip to content

[pull] main from doocs:main #186

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Sep 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ id 是该表的主键(具有唯一值的列)。
<p><strong>示例 1:</strong></p>

<pre>
<strong>输入:</strong>
<strong>输入:</strong>
Employee 表:
+----+-------+--------+-----------+
| id | name | salary | managerId |
Expand All @@ -54,7 +54,7 @@ Employee 表:
| 3 | Sam | 60000 | Null |
| 4 | Max | 90000 | Null |
+----+-------+--------+-----------+
<strong>输出:</strong>
<strong>输出:</strong>
+----------+
| Employee |
+----------+
Expand All @@ -68,7 +68,9 @@ Employee 表:

<!-- solution:start -->

### 方法一
### 方法一:自连接 + 条件筛选

我们可以通过自连接 `Employee` 表,找出员工的工资以及其经理的工资,然后筛选出工资比经理高的员工。

<!-- tabs:start -->

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


def find_employees(employee: pd.DataFrame) -> pd.DataFrame:
df = employee.merge(right=employee, how="left", left_on="managerId", right_on="id")
emp = df[df["salary_x"] > df["salary_y"]]["name_x"]

return pd.DataFrame({"Employee": emp})
```

#### MySQL

```sql
SELECT Name AS Employee
FROM Employee AS Curr
WHERE
Salary > (
SELECT Salary
FROM Employee
WHERE Id = Curr.ManagerId
);
merged = employee.merge(
employee, left_on="managerId", right_on="id", suffixes=("", "_manager")
)
result = merged[merged["salary"] > merged["salary_manager"]][["name"]]
result.columns = ["Employee"]
return result
```

<!-- tabs:end -->

<!-- solution:end -->

<!-- solution:start -->

### 方法二

<!-- tabs:start -->

#### MySQL

```sql
# Write your MySQL query statement below
SELECT
e1.name AS Employee
SELECT e1.name Employee
FROM
Employee AS e1
JOIN Employee AS e2 ON e1.managerId = e2.id
Employee e1
JOIN Employee e2 ON e1.managerId = e2.id
WHERE e1.salary > e2.salary;
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ Each row of this table indicates the ID of an employee, their name, salary, and
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong>
<strong>Input:</strong>
Employee table:
+----+-------+--------+-----------+
| id | name | salary | managerId |
Expand All @@ -53,7 +53,7 @@ Employee table:
| 3 | Sam | 60000 | Null |
| 4 | Max | 90000 | Null |
+----+-------+--------+-----------+
<strong>Output:</strong>
<strong>Output:</strong>
+----------+
| Employee |
+----------+
Expand All @@ -68,7 +68,9 @@ Employee table:

<!-- solution:start -->

### Solution 1
### Solution 1: Self-Join + Conditional Filtering

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.

<!-- tabs:start -->

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


def find_employees(employee: pd.DataFrame) -> pd.DataFrame:
df = employee.merge(right=employee, how="left", left_on="managerId", right_on="id")
emp = df[df["salary_x"] > df["salary_y"]]["name_x"]

return pd.DataFrame({"Employee": emp})
```

#### MySQL

```sql
SELECT Name AS Employee
FROM Employee AS Curr
WHERE
Salary > (
SELECT Salary
FROM Employee
WHERE Id = Curr.ManagerId
);
merged = employee.merge(
employee, left_on="managerId", right_on="id", suffixes=("", "_manager")
)
result = merged[merged["salary"] > merged["salary_manager"]][["name"]]
result.columns = ["Employee"]
return result
```

<!-- tabs:end -->

<!-- solution:end -->

<!-- solution:start -->

### Solution 2

<!-- tabs:start -->

#### MySQL

```sql
# Write your MySQL query statement below
SELECT
e1.name AS Employee
SELECT e1.name Employee
FROM
Employee AS e1
JOIN Employee AS e2 ON e1.managerId = e2.id
Employee e1
JOIN Employee e2 ON e1.managerId = e2.id
WHERE e1.salary > e2.salary;
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@


def find_employees(employee: pd.DataFrame) -> pd.DataFrame:
df = employee.merge(right=employee, how="left", left_on="managerId", right_on="id")
emp = df[df["salary_x"] > df["salary_y"]]["name_x"]

return pd.DataFrame({"Employee": emp})
merged = employee.merge(
employee, left_on="managerId", right_on="id", suffixes=("", "_manager")
)
result = merged[merged["salary"] > merged["salary_manager"]][["name"]]
result.columns = ["Employee"]
return result
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
SELECT Name AS Employee
FROM Employee AS Curr
WHERE
Salary > (
SELECT Salary
FROM Employee
WHERE Id = Curr.ManagerId
);
# Write your MySQL query statement below
SELECT e1.name Employee
FROM
Employee e1
JOIN Employee e2 ON e1.managerId = e2.id
WHERE e1.salary > e2.salary;

This file was deleted.

35 changes: 0 additions & 35 deletions solution/0400-0499/0459.Repeated Substring Pattern/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,39 +131,4 @@ impl Solution {

<!-- solution:end -->

<!-- solution:start -->

### 方法二

<!-- tabs:start -->

#### TypeScript

```ts
function repeatedSubstringPattern(s: string): boolean {
const n = s.length;
for (let i = 0; i < n >> 1; i++) {
const len = i + 1;
if (n % len !== 0) {
continue;
}
const t = s.slice(0, len);
let j: number;
for (j = len; j < n; j += len) {
if (s.slice(j, j + len) !== t) {
break;
}
}
if (j === n) {
return true;
}
}
return false;
}
```

<!-- tabs:end -->

<!-- solution:end -->

<!-- problem:end -->
35 changes: 0 additions & 35 deletions solution/0400-0499/0459.Repeated Substring Pattern/README_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,39 +121,4 @@ impl Solution {

<!-- solution:end -->

<!-- solution:start -->

### Solution 2

<!-- tabs:start -->

#### TypeScript

```ts
function repeatedSubstringPattern(s: string): boolean {
const n = s.length;
for (let i = 0; i < n >> 1; i++) {
const len = i + 1;
if (n % len !== 0) {
continue;
}
const t = s.slice(0, len);
let j: number;
for (j = len; j < n; j += len) {
if (s.slice(j, j + len) !== t) {
break;
}
}
if (j === n) {
return true;
}
}
return false;
}
```

<!-- tabs:end -->

<!-- solution:end -->

<!-- problem:end -->
20 changes: 0 additions & 20 deletions solution/0400-0499/0459.Repeated Substring Pattern/Solution2.ts

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,9 @@ public:
sort(nums.begin(), nums.end());
int k = nums[nums.size() >> 1];
int ans = 0;
for (int& v : nums) ans += abs(v - k);
for (int& v : nums) {
ans += abs(v - k);
}
return ans;
}
};
Expand Down Expand Up @@ -147,8 +149,8 @@ func abs(x int) int {
```ts
function minMoves2(nums: number[]): number {
nums.sort((a, b) => a - b);
const mid = nums[nums.length >> 1];
return nums.reduce((r, v) => r + Math.abs(v - mid), 0);
const k = nums[nums.length >> 1];
return nums.reduce((r, v) => r + Math.abs(v - k), 0);
}
```

Expand All @@ -158,12 +160,12 @@ function minMoves2(nums: number[]): number {
impl Solution {
pub fn min_moves2(mut nums: Vec<i32>) -> i32 {
nums.sort();
let mid = nums[nums.len() / 2];
let mut res = 0;
let k = nums[nums.len() / 2];
let mut ans = 0;
for num in nums.iter() {
res += (num - mid).abs();
ans += (num - k).abs();
}
res
ans
}
}
```
Expand All @@ -172,35 +174,4 @@ impl Solution {

<!-- solution:end -->

<!-- solution:start -->

### 方法二:排序 + 前缀和

如果我们不知道中位数的性质,也可以使用前缀和的方法来求解。

时间复杂度 $O(n\log n)$,空间复杂度 $O(n)$。

<!-- tabs:start -->

#### Python3

```python
class Solution:
def minMoves2(self, nums: List[int]) -> int:
def move(i):
v = nums[i]
a = v * i - s[i]
b = s[-1] - s[i + 1] - v * (n - i - 1)
return a + b

nums.sort()
s = [0] + list(accumulate(nums))
n = len(nums)
return min(move(i) for i in range(n))
```

<!-- tabs:end -->

<!-- solution:end -->

<!-- problem:end -->
Loading