diff --git a/src/main/java/g0001_0100/s0050_powx_n/readme.md b/src/main/java/g0001_0100/s0050_powx_n/readme.md
index 3e93a2f3a..426d83a07 100644
--- a/src/main/java/g0001_0100/s0050_powx_n/readme.md
+++ b/src/main/java/g0001_0100/s0050_powx_n/readme.md
@@ -28,4 +28,6 @@ Implement [pow(x, n)](http://www.cplusplus.com/reference/valarray/pow/), which c
* `-100.0 < x < 100.0`
* -231 <= n <= 231-1
+* `n` is an integer.
+* Either `x` is not zero or `n > 0`.
* -104 <= xn <= 104
\ No newline at end of file
diff --git a/src/main/java/g0001_0100/s0053_maximum_subarray/readme.md b/src/main/java/g0001_0100/s0053_maximum_subarray/readme.md
index aaeed21c0..f85358539 100644
--- a/src/main/java/g0001_0100/s0053_maximum_subarray/readme.md
+++ b/src/main/java/g0001_0100/s0053_maximum_subarray/readme.md
@@ -1,10 +1,8 @@
53\. Maximum Subarray
-Easy
+Medium
-Given an integer array `nums`, find the contiguous subarray (containing at least one number) which has the largest sum and return _its sum_.
-
-A **subarray** is a **contiguous** part of an array.
+Given an integer array `nums`, find the **non-empty subarrays** with the largest sum, and return _its sum_.
**Example 1:**
@@ -12,19 +10,23 @@ A **subarray** is a **contiguous** part of an array.
**Output:** 6
-**Explanation:** [4,-1,2,1] has the largest sum = 6.
+**Explanation:** The subarray [4,-1,2,1] has the largest sum 6.
**Example 2:**
**Input:** nums = [1]
-**Output:** 1
+**Output:** 1
+
+**Explanation:** The subarray [1] has the largest sum 1.
**Example 3:**
**Input:** nums = [5,4,-1,7,8]
-**Output:** 23
+**Output:** 23
+
+**Explanation:** The subarray [5,4,-1,7,8] has the largest sum 23.
**Constraints:**
diff --git a/src/main/java/g0001_0100/s0056_merge_intervals/readme.md b/src/main/java/g0001_0100/s0056_merge_intervals/readme.md
index 8c9be4e77..64ab839c6 100644
--- a/src/main/java/g0001_0100/s0056_merge_intervals/readme.md
+++ b/src/main/java/g0001_0100/s0056_merge_intervals/readme.md
@@ -10,7 +10,7 @@ Given an array of `intervals` where intervals[i] = [starti, end
**Output:** [[1,6],[8,10],[15,18]]
-**Explanation:** Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
+**Explanation:** Since intervals [1,3] and [2,6] overlap, merge them into [1,6].
**Example 2:**
@@ -20,6 +20,14 @@ Given an array of `intervals` where intervals[i] = [starti, end
**Explanation:** Intervals [1,4] and [4,5] are considered overlapping.
+**Example 3:**
+
+**Input:** intervals = [[4,7],[1,4]]
+
+**Output:** [[1,7]]
+
+**Explanation:** Intervals [1,4] and [4,7] are considered overlapping.
+
**Constraints:**
* 1 <= intervals.length <= 104
@@ -57,4 +65,4 @@ class Solution {
}
```
-This implementation efficiently merges overlapping intervals in the given array `intervals` using sorting and iteration, with a time complexity of O(n log n) due to sorting.
\ No newline at end of file
+This implementation efficiently merges overlapping intervals in the given array `intervals` using sorting and iteration, with a time complexity of O(n log n) due to sorting.
diff --git a/src/main/java/g0001_0100/s0057_insert_interval/readme.md b/src/main/java/g0001_0100/s0057_insert_interval/readme.md
index 1b94c0138..a179bde23 100644
--- a/src/main/java/g0001_0100/s0057_insert_interval/readme.md
+++ b/src/main/java/g0001_0100/s0057_insert_interval/readme.md
@@ -8,6 +8,8 @@ Insert `newInterval` into `intervals` such that `intervals` is still sorted in a
Return `intervals` _after the insertion_.
+**Note** that you don't need to modify `intervals` in-place. You can make a new array and return it.
+
**Example 1:**
**Input:** intervals = [[1,3],[6,9]], newInterval = [2,5]
@@ -20,25 +22,7 @@ Return `intervals` _after the insertion_.
**Output:** [[1,2],[3,10],[12,16]]
-**Explanation:** Because the new interval `[4,8]` overlaps with `[3,5],[6,7],[8,10]`.
-
-**Example 3:**
-
-**Input:** intervals = [], newInterval = [5,7]
-
-**Output:** [[5,7]]
-
-**Example 4:**
-
-**Input:** intervals = [[1,5]], newInterval = [2,3]
-
-**Output:** [[1,5]]
-
-**Example 5:**
-
-**Input:** intervals = [[1,5]], newInterval = [2,7]
-
-**Output:** [[1,7]]
+**Explanation:** Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10].
**Constraints:**
diff --git a/src/main/java/g0001_0100/s0058_length_of_last_word/readme.md b/src/main/java/g0001_0100/s0058_length_of_last_word/readme.md
index 96b92534e..578da4752 100644
--- a/src/main/java/g0001_0100/s0058_length_of_last_word/readme.md
+++ b/src/main/java/g0001_0100/s0058_length_of_last_word/readme.md
@@ -2,9 +2,9 @@
Easy
-Given a string `s` consisting of some words separated by some number of spaces, return _the length of the **last** word in the string._
+Given a string `s` consisting of words and spaces, return _the length of the **last** word in the string._
-A **word** is a maximal substring consisting of non-space characters only.
+A **word** is a maximal **substring** consisting of non-space characters only.
**Example 1:**
diff --git a/src/main/java/g0001_0100/s0062_unique_paths/readme.md b/src/main/java/g0001_0100/s0062_unique_paths/readme.md
index 31699d919..ec2431fa9 100644
--- a/src/main/java/g0001_0100/s0062_unique_paths/readme.md
+++ b/src/main/java/g0001_0100/s0062_unique_paths/readme.md
@@ -2,11 +2,11 @@
Medium
-A robot is located at the top-left corner of a `m x n` grid (marked 'Start' in the diagram below).
+There is a robot on an `m x n` grid. The robot is initially located at the **top-left corner** (i.e., `grid[0][0]`). The robot tries to move to the **bottom-right corner** (i.e., `grid[m - 1][n - 1]`). The robot can only move either down or right at any point in time.
-The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).
+Given the two integers `m` and `n`, return _the number of possible unique paths that the robot can take to reach the bottom-right corner_.
-How many possible unique paths are there?
+The test cases are generated so that the answer will be less than or equal to 2 * 109.
**Example 1:**
@@ -22,24 +22,7 @@ How many possible unique paths are there?
**Output:** 3
-**Explanation:**
-
- From the top-left corner, there are a total of 3 ways to reach the bottom-right corner:
- 1. Right -> Down -> Down
- 2. Down -> Down -> Right
- 3. Down -> Right -> Down
-
-**Example 3:**
-
-**Input:** m = 7, n = 3
-
-**Output:** 28
-
-**Example 4:**
-
-**Input:** m = 3, n = 3
-
-**Output:** 6
+**Explanation:** From the top-left corner, there are a total of 3 ways to reach the bottom-right corner: 1. Right -> Down -> Down 2. Down -> Down -> Right 3. Down -> Right -> Down
**Constraints:**
diff --git a/src/main/java/g0001_0100/s0063_unique_paths_ii/readme.md b/src/main/java/g0001_0100/s0063_unique_paths_ii/readme.md
index 2d511b1af..f4351a18f 100644
--- a/src/main/java/g0001_0100/s0063_unique_paths_ii/readme.md
+++ b/src/main/java/g0001_0100/s0063_unique_paths_ii/readme.md
@@ -2,13 +2,13 @@
Medium
-A robot is located at the top-left corner of a `m x n` grid (marked 'Start' in the diagram below).
+You are given an `m x n` integer array `grid`. There is a robot initially located at the **top-left corner** (i.e., `grid[0][0]`). The robot tries to move to the **bottom-right corner** (i.e., `grid[m - 1][n - 1]`). The robot can only move either down or right at any point in time.
-The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).
+An obstacle and space are marked as `1` or `0` respectively in `grid`. A path that the robot takes cannot include **any** square that is an obstacle.
-Now consider if some obstacles are added to the grids. How many unique paths would there be?
+Return _the number of possible unique paths that the robot can take to reach the bottom-right corner_.
-An obstacle and space is marked as `1` and `0` respectively in the grid.
+The testcases are generated so that the answer will be less than or equal to 2 * 109.
**Example 1:**
diff --git a/src/main/java/g0001_0100/s0064_minimum_path_sum/readme.md b/src/main/java/g0001_0100/s0064_minimum_path_sum/readme.md
index 4882401bd..2a49e04ab 100644
--- a/src/main/java/g0001_0100/s0064_minimum_path_sum/readme.md
+++ b/src/main/java/g0001_0100/s0064_minimum_path_sum/readme.md
@@ -27,7 +27,7 @@ Given a `m x n` `grid` filled with non-negative numbers, find a path from top le
* `m == grid.length`
* `n == grid[i].length`
* `1 <= m, n <= 200`
-* `0 <= grid[i][j] <= 100`
+* `0 <= grid[i][j] <= 200`
To solve the "Minimum Path Sum" problem in Java with the Solution class, follow these steps:
diff --git a/src/main/java/g0001_0100/s0066_plus_one/readme.md b/src/main/java/g0001_0100/s0066_plus_one/readme.md
index c2e467dcd..9ad61754e 100644
--- a/src/main/java/g0001_0100/s0066_plus_one/readme.md
+++ b/src/main/java/g0001_0100/s0066_plus_one/readme.md
@@ -2,7 +2,7 @@
Easy
-You are given a **large integer** represented as an integer array `digits`, where each `digits[i]` is the `ith` digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading `0`'s.
+You are given a **large integer** represented as an integer array `digits`, where each `digits[i]` is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading `0`'s.
Increment the large integer by one and return _the resulting array of digits_.
@@ -24,14 +24,6 @@ Increment the large integer by one and return _the resulting array of digits_.
**Example 3:**
-**Input:** digits = [0]
-
-**Output:** [1]
-
-**Explanation:** The array represents the integer 0. Incrementing by one gives 0 + 1 = 1. Thus, the result should be [1].
-
-**Example 4:**
-
**Input:** digits = [9]
**Output:** [1,0]
diff --git a/src/main/java/g0001_0100/s0068_text_justification/readme.md b/src/main/java/g0001_0100/s0068_text_justification/readme.md
index 78e9dd708..8340865ce 100644
--- a/src/main/java/g0001_0100/s0068_text_justification/readme.md
+++ b/src/main/java/g0001_0100/s0068_text_justification/readme.md
@@ -8,12 +8,12 @@ You should pack your words in a greedy approach; that is, pack as many words as
Extra spaces between words should be distributed as evenly as possible. If the number of spaces on a line does not divide evenly between words, the empty slots on the left will be assigned more spaces than the slots on the right.
-For the last line of text, it should be left-justified and no extra space is inserted between words.
+For the last line of text, it should be left-justified, and no extra space is inserted between words.
**Note:**
* A word is defined as a character sequence consisting of non-space characters only.
-* Each word's length is guaranteed to be greater than 0 and not exceed maxWidth.
+* Each word's length is guaranteed to be greater than `0` and not exceed `maxWidth`.
* The input array `words` contains at least one word.
**Example 1:**
@@ -28,7 +28,7 @@ For the last line of text, it should be left-justified and no extra space is ins
**Output:** [ "What must be", "acknowledgment ", "shall be " ]
-**Explanation:** Note that the last line is "shall be " instead of "shall be", because the last line must be left-justified instead of fully-justified. Note that the second line is also left-justified becase it contains only one word.
+**Explanation:** Note that the last line is "shall be " instead of "shall be", because the last line must be left-justified instead of fully-justified. Note that the second line is also left-justified because it contains only one word.
**Example 3:**
diff --git a/src/main/java/g0001_0100/s0069_sqrtx/readme.md b/src/main/java/g0001_0100/s0069_sqrtx/readme.md
index 005177f31..4c91b62ca 100644
--- a/src/main/java/g0001_0100/s0069_sqrtx/readme.md
+++ b/src/main/java/g0001_0100/s0069_sqrtx/readme.md
@@ -2,17 +2,19 @@
Easy
-Given a non-negative integer `x`, compute and return _the square root of_ `x`.
+Given a non-negative integer `x`, return _the square root of_ `x` _rounded down to the nearest integer_. The returned integer should be **non-negative** as well.
-Since the return type is an integer, the decimal digits are **truncated**, and only **the integer part** of the result is returned.
+You **must not use** any built-in exponent function or operator.
-**Note:** You are not allowed to use any built-in exponent function or operator, such as `pow(x, 0.5)` or `x ** 0.5`.
+* For example, do not use `pow(x, 0.5)` in c++ or x ** 0.5 in python.
**Example 1:**
**Input:** x = 4
-**Output:** 2
+**Output:** 2
+
+**Explanation:** The square root of 4 is 2, so we return 2.
**Example 2:**
@@ -20,8 +22,8 @@ Since the return type is an integer, the decimal digits are **truncated**, and o
**Output:** 2
-**Explanation:** The square root of 8 is 2.82842..., and since the decimal part is truncated, 2 is returned.
+**Explanation:** The square root of 8 is 2.82842..., and since we round it down to the nearest integer, 2 is returned.
**Constraints:**
-* 0 <= x <= 231 - 1
+* 0 <= x <= 231 - 1
\ No newline at end of file
diff --git a/src/main/java/g0001_0100/s0071_simplify_path/readme.md b/src/main/java/g0001_0100/s0071_simplify_path/readme.md
index af8fa8b02..6f56e3d62 100644
--- a/src/main/java/g0001_0100/s0071_simplify_path/readme.md
+++ b/src/main/java/g0001_0100/s0071_simplify_path/readme.md
@@ -2,18 +2,23 @@
Medium
-Given a string `path`, which is an **absolute path** (starting with a slash `'/'`) to a file or directory in a Unix-style file system, convert it to the simplified **canonical path**.
+You are given an _absolute_ path for a Unix-style file system, which always begins with a slash `'/'`. Your task is to transform this absolute path into its **simplified canonical path**.
-In a Unix-style file system, a period `'.'` refers to the current directory, a double period `'..'` refers to the directory up a level, and any multiple consecutive slashes (i.e. `'//'`) are treated as a single slash `'/'`. For this problem, any other format of periods such as `'...'` are treated as file/directory names.
+The _rules_ of a Unix-style file system are as follows:
-The **canonical path** should have the following format:
+* A single period `'.'` represents the current directory.
+* A double period `'..'` represents the previous/parent directory.
+* Multiple consecutive slashes such as `'//'` and `'///'` are treated as a single slash `'/'`.
+* Any sequence of periods that does **not match** the rules above should be treated as a **valid directory or** **file** **name**. For example, `'...'` and `'....'` are valid directory or file names.
-* The path starts with a single slash `'/'`.
-* Any two directories are separated by a single slash `'/'`.
-* The path does not end with a trailing `'/'`.
-* The path only contains the directories on the path from the root directory to the target file or directory (i.e., no period `'.'` or double period `'..'`)
+The simplified canonical path should follow these _rules_:
-Return _the simplified **canonical path**_.
+* The path must start with a single slash `'/'`.
+* Directories within the path must be separated by exactly one slash `'/'`.
+* The path must not end with a slash `'/'`, unless it is the root directory.
+* The path must not have any single or double periods (`'.'` and `'..'`) used to denote current or parent directories.
+
+Return the **simplified canonical path**.
**Example 1:**
@@ -21,29 +26,49 @@ Return _the simplified **canonical path**_.
**Output:** "/home"
-**Explanation:** Note that there is no trailing slash after the last directory name.
+**Explanation:**
+
+The trailing slash should be removed.
**Example 2:**
-**Input:** path = "/../"
+**Input:** path = "/home//foo/"
-**Output:** "/"
+**Output:** "/home/foo"
+
+**Explanation:**
-**Explanation:** Going one level up from the root directory is a no-op, as the root level is the highest level you can go.
+Multiple consecutive slashes are replaced by a single one.
**Example 3:**
-**Input:** path = "/home//foo/"
+**Input:** path = "/home/user/Documents/../Pictures"
-**Output:** "/home/foo"
+**Output:** "/home/user/Pictures"
+
+**Explanation:**
-**Explanation:** In the canonical path, multiple consecutive slashes are replaced by a single one.
+A double period `".."` refers to the directory up a level (the parent directory).
**Example 4:**
-**Input:** path = "/a/./b/../../c/"
+**Input:** path = "/../"
+
+**Output:** "/"
+
+**Explanation:**
+
+Going one level up from the root directory is not possible.
+
+**Example 5:**
+
+**Input:** path = "/.../a/../b/c/../d/./"
+
+**Output:** "/.../b/d"
+
+**Explanation:**
-**Output:** "/c"
+`"..."` is a valid name for a directory in this problem.
**Constraints:**
diff --git a/src/main/java/g0001_0100/s0072_edit_distance/readme.md b/src/main/java/g0001_0100/s0072_edit_distance/readme.md
index 166565d35..b7ca3feb5 100644
--- a/src/main/java/g0001_0100/s0072_edit_distance/readme.md
+++ b/src/main/java/g0001_0100/s0072_edit_distance/readme.md
@@ -1,6 +1,6 @@
72\. Edit Distance
-Hard
+Medium
Given two strings `word1` and `word2`, return _the minimum number of operations required to convert `word1` to `word2`_.