diff --git a/solution/0100-0199/0181.Employees Earning More Than Their Managers/README.md b/solution/0100-0199/0181.Employees Earning More Than Their Managers/README.md index 3b482f41a59b9..c865c90407964 100644 --- a/solution/0100-0199/0181.Employees Earning More Than Their Managers/README.md +++ b/solution/0100-0199/0181.Employees Earning More Than Their Managers/README.md @@ -44,7 +44,7 @@ id 是该表的主键(具有唯一值的列)。

示例 1:

-输入: 
+输入:
 Employee 表:
 +----+-------+--------+-----------+
 | id | name  | salary | managerId |
@@ -54,7 +54,7 @@ Employee 表:
 | 3  | Sam   | 60000  | Null      |
 | 4  | Max   | 90000  | Null      |
 +----+-------+--------+-----------+
-输出: 
+输出:
 +----------+
 | Employee |
 +----------+
@@ -68,7 +68,9 @@ Employee 表:
 
 
 
-### 方法一
+### 方法一:自连接 + 条件筛选
+
+我们可以通过自连接 `Employee` 表,找出员工的工资以及其经理的工资,然后筛选出工资比经理高的员工。
 
 
 
@@ -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
 ```
 
-
-
-
-
-
-
-### 方法二
-
-
-
 #### 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;
 ```
 
diff --git a/solution/0100-0199/0181.Employees Earning More Than Their Managers/README_EN.md b/solution/0100-0199/0181.Employees Earning More Than Their Managers/README_EN.md
index 60ad47ffbcc60..4c5b427dbfe48 100644
--- a/solution/0100-0199/0181.Employees Earning More Than Their Managers/README_EN.md	
+++ b/solution/0100-0199/0181.Employees Earning More Than Their Managers/README_EN.md	
@@ -43,7 +43,7 @@ Each row of this table indicates the ID of an employee, their name, salary, and
 

Example 1:

-Input: 
+Input:
 Employee table:
 +----+-------+--------+-----------+
 | id | name  | salary | managerId |
@@ -53,7 +53,7 @@ Employee table:
 | 3  | Sam   | 60000  | Null      |
 | 4  | Max   | 90000  | Null      |
 +----+-------+--------+-----------+
-Output: 
+Output:
 +----------+
 | Employee |
 +----------+
@@ -68,7 +68,9 @@ Employee table:
 
 
 
-### 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.
 
 
 
@@ -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
 ```
 
-
-
-
-
-
-
-### Solution 2
-
-
-
 #### 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;
 ```
 
diff --git a/solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution.py b/solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution.py
index 2084f018ba6ad..e9d9b508f46b9 100644
--- a/solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution.py	
+++ b/solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution.py	
@@ -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
diff --git a/solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution.sql b/solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution.sql
index da349ae2189b6..09530491aef0c 100644
--- a/solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution.sql	
+++ b/solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution.sql	
@@ -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;
diff --git a/solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution2.sql b/solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution2.sql
deleted file mode 100644
index b285eab38d01a..0000000000000
--- a/solution/0100-0199/0181.Employees Earning More Than Their Managers/Solution2.sql	
+++ /dev/null
@@ -1,7 +0,0 @@
-# Write your MySQL query statement below
-SELECT
-    e1.name AS Employee
-FROM
-    Employee AS e1
-    JOIN Employee AS e2 ON e1.managerId = e2.id
-WHERE e1.salary > e2.salary;
diff --git a/solution/0400-0499/0459.Repeated Substring Pattern/README.md b/solution/0400-0499/0459.Repeated Substring Pattern/README.md
index cd3b2ad9c8bb8..3ed5096f5445e 100644
--- a/solution/0400-0499/0459.Repeated Substring Pattern/README.md	
+++ b/solution/0400-0499/0459.Repeated Substring Pattern/README.md	
@@ -131,39 +131,4 @@ impl Solution {
 
 
 
-
-
-### 方法二
-
-
-
-#### 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;
-}
-```
-
-
-
-
-
 
diff --git a/solution/0400-0499/0459.Repeated Substring Pattern/README_EN.md b/solution/0400-0499/0459.Repeated Substring Pattern/README_EN.md
index 796b58a2b53c5..f537437ecaf1f 100644
--- a/solution/0400-0499/0459.Repeated Substring Pattern/README_EN.md	
+++ b/solution/0400-0499/0459.Repeated Substring Pattern/README_EN.md	
@@ -121,39 +121,4 @@ impl Solution {
 
 
 
-
-
-### Solution 2
-
-
-
-#### 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;
-}
-```
-
-
-
-
-
 
diff --git a/solution/0400-0499/0459.Repeated Substring Pattern/Solution2.ts b/solution/0400-0499/0459.Repeated Substring Pattern/Solution2.ts
deleted file mode 100644
index 04bb2475a988e..0000000000000
--- a/solution/0400-0499/0459.Repeated Substring Pattern/Solution2.ts	
+++ /dev/null
@@ -1,20 +0,0 @@
-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;
-}
diff --git a/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/README.md b/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/README.md
index 9766fcc59c830..ecaba2c407888 100644
--- a/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/README.md	
+++ b/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/README.md	
@@ -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;
     }
 };
@@ -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);
 }
 ```
 
@@ -158,12 +160,12 @@ function minMoves2(nums: number[]): number {
 impl Solution {
     pub fn min_moves2(mut nums: Vec) -> 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
     }
 }
 ```
@@ -172,35 +174,4 @@ impl Solution {
 
 
 
-
-
-### 方法二:排序 + 前缀和
-
-如果我们不知道中位数的性质,也可以使用前缀和的方法来求解。
-
-时间复杂度 $O(n\log n)$,空间复杂度 $O(n)$。
-
-
-
-#### 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))
-```
-
-
-
-
-
 
diff --git a/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/README_EN.md b/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/README_EN.md
index 30f763d29f493..86c2ff43fc2b4 100644
--- a/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/README_EN.md	
+++ b/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/README_EN.md	
@@ -57,7 +57,24 @@ Only two moves are needed (remember each move increments or decrements one eleme
 
 
 
-### Solution 1
+### Solution 1: Sorting + Median
+
+This problem can be abstracted to finding a point on a number line such that the sum of distances from $n$ points to this point is minimized. The answer is the median of the $n$ points.
+
+The median has the property that the sum of distances from all numbers to the median is minimized.
+
+Proof:
+
+First, given a sorted sequence $a_1, a_2, \cdots, a_n$, we assume $x$ is the point that minimizes the sum of distances from $a_1$ to $a_n$. Clearly, $x$ must lie between $a_1$ and $a_n$. Since the distances from $a_1$ and $a_n$ to $x$ are equal and both equal to $a_n - a_1$, we can ignore $a_1$ and $a_n$ and only consider $a_2, a_3, \cdots, a_{n-1}$. This reduces the problem to finding a point within $a_2, a_3, \cdots, a_{n-1}$ that minimizes the sum of distances. By iterating this process, we conclude that the median of a sequence minimizes the sum of distances to the other numbers.
+
+In this problem, we can first sort the array, then find the median, and finally calculate the sum of distances from all numbers to the median.
+
+The time complexity is $O(n \log n)$, and the space complexity is $O(\log n)$.
+
+Similar problems:
+
+-   [296. Best Meeting Point](https://github.com/doocs/leetcode/blob/main/solution/0200-0299/0296.Best%20Meeting%20Point/README_EN.md)
+-   [2448. Minimum Cost to Make Array Equal](https://github.com/doocs/leetcode/blob/main/solution/2400-2499/2448.Minimum%20Cost%20to%20Make%20Array%20Equal/README_EN.md)
 
 
 
@@ -96,7 +113,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;
     }
 };
@@ -128,8 +147,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);
 }
 ```
 
@@ -139,12 +158,12 @@ function minMoves2(nums: number[]): number {
 impl Solution {
     pub fn min_moves2(mut nums: Vec) -> 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
     }
 }
 ```
@@ -153,31 +172,4 @@ impl Solution {
 
 
 
-
-
-### Solution 2
-
-
-
-#### 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))
-```
-
-
-
-
-
 
diff --git a/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution.cpp b/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution.cpp
index b51d3aa425ee1..3ea2196946003 100644
--- a/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution.cpp	
+++ b/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution.cpp	
@@ -4,7 +4,9 @@ class Solution {
         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;
     }
-};
\ No newline at end of file
+};
diff --git a/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution.rs b/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution.rs
index e561b2e2e178b..82b2a43d13e1c 100644
--- a/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution.rs	
+++ b/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution.rs	
@@ -1,11 +1,11 @@
 impl Solution {
     pub fn min_moves2(mut nums: Vec) -> 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
     }
 }
diff --git a/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution.ts b/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution.ts
index f01325954ee85..b209cf697dd2d 100644
--- a/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution.ts	
+++ b/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution.ts	
@@ -1,5 +1,5 @@
 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);
 }
diff --git a/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution2.py b/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution2.py
deleted file mode 100644
index f099225ea8553..0000000000000
--- a/solution/0400-0499/0462.Minimum Moves to Equal Array Elements II/Solution2.py	
+++ /dev/null
@@ -1,12 +0,0 @@
-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))