Skip to content

Commit fedaa29

Browse files
committed
feat: add solutions to lc problems: No.0153,0890
- No.0153.Find Minimum in Rotated Sorted Array - No.0890.Find and Replace Pattern
1 parent 9c11938 commit fedaa29

File tree

8 files changed

+174
-51
lines changed

8 files changed

+174
-51
lines changed

solution/0100-0199/0153.Find Minimum in Rotated Sorted Array/README.md

+19-19
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,15 @@
6363

6464
**方法一:二分查找**
6565

66-
初始,判断数组首尾元素的大小关系,若 `nums[0] <= nums[n - 1]`,说明当前数组已经是递增数组,最小值一定是数组第一个元素,提前返回 `nums[0]`
66+
初始,判断数组首尾元素的大小关系,若 `nums[0] <= nums[n - 1]` 条件成立,则说明当前数组已经是递增数组,最小值一定是数组第一个元素,提前返回 `nums[0]`
6767

68-
否则,进行二分判断。若 `nums[0] <= nums[mid]`,说明 `[left, mid]` 范围内的元素构成递增数组,最小值一定在 mid 的右侧,否则说明 `[mid + 1, right]`范围内的元素构成递增数组,最小值一定在 mid 的左侧。
68+
否则,进行二分判断。若 `nums[0] <= nums[mid]`,说明 `[left, mid]` 范围内的元素构成递增数组,最小值一定在 `mid` 的右侧,否则说明 `[mid + 1, right]` 范围内的元素构成递增数组,最小值一定在 `mid` 的左侧。
6969

70-
时间复杂度 O(logn)。
70+
---
71+
72+
除了 `nums[0]`,也可以以 `nums[right]` 作为参照物,若 `nums[mid] < nums[right]` 成立,则最小值存在于 `[left, mid]` 范围当中,否则存在于 `[mid + 1, right]`
73+
74+
时间复杂度:$O(logN)$
7175

7276
<!-- tabs:start -->
7377

@@ -181,17 +185,17 @@ var findMin = function (nums) {
181185
```rust
182186
impl Solution {
183187
pub fn find_min(nums: Vec<i32>) -> i32 {
184-
let mut l = 0;
185-
let mut r = nums.len() - 1;
186-
while l < r {
187-
let mid = l + (r - l) / 2;
188-
if nums[mid] > nums[r] {
189-
l = mid + 1;
188+
let mut left = 0;
189+
let mut right = nums.len() - 1;
190+
while left < right {
191+
let mid = left + (right - left) / 2;
192+
if nums[mid] > nums[right] {
193+
left = mid + 1;
190194
} else {
191-
r = mid;
195+
right = mid;
192196
}
193197
}
194-
nums[l]
198+
nums[left]
195199
}
196200
}
197201
```
@@ -200,15 +204,11 @@ impl Solution {
200204

201205
```ts
202206
function findMin(nums: number[]): number {
203-
const n = nums.length;
204-
if (nums[0] <= nums[n - 1]) {
205-
return nums[0];
206-
}
207-
let left = 0,
208-
right = n - 1;
207+
let left = 0;
208+
let right = nums.length - 1;
209209
while (left < right) {
210-
const mid = (left + right) >> 1;
211-
if (nums[0] <= nums[mid]) {
210+
const mid = (left + right) >>> 1;
211+
if (nums[mid] > nums[right]) {
212212
left = mid + 1;
213213
} else {
214214
right = mid;

solution/0100-0199/0153.Find Minimum in Rotated Sorted Array/README_EN.md

+12-16
Original file line numberDiff line numberDiff line change
@@ -163,17 +163,17 @@ var findMin = function (nums) {
163163
```rust
164164
impl Solution {
165165
pub fn find_min(nums: Vec<i32>) -> i32 {
166-
let mut l = 0;
167-
let mut r = nums.len() - 1;
168-
while l < r {
169-
let mid = l + (r - l) / 2;
170-
if nums[mid] > nums[r] {
171-
l = mid + 1;
166+
let mut left = 0;
167+
let mut right = nums.len() - 1;
168+
while left < right {
169+
let mid = left + (right - left) / 2;
170+
if nums[mid] > nums[right] {
171+
left = mid + 1;
172172
} else {
173-
r = mid;
173+
right = mid;
174174
}
175175
}
176-
nums[l]
176+
nums[left]
177177
}
178178
}
179179
```
@@ -182,15 +182,11 @@ impl Solution {
182182

183183
```ts
184184
function findMin(nums: number[]): number {
185-
const n = nums.length;
186-
if (nums[0] <= nums[n - 1]) {
187-
return nums[0];
188-
}
189-
let left = 0,
190-
right = n - 1;
185+
let left = 0;
186+
let right = nums.length - 1;
191187
while (left < right) {
192-
const mid = (left + right) >> 1;
193-
if (nums[0] <= nums[mid]) {
188+
const mid = (left + right) >>> 1;
189+
if (nums[mid] > nums[right]) {
194190
left = mid + 1;
195191
} else {
196192
right = mid;
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
impl Solution {
22
pub fn find_min(nums: Vec<i32>) -> i32 {
3-
let mut l = 0;
4-
let mut r = nums.len() - 1;
5-
while l < r {
6-
let mid = l + (r - l) / 2;
7-
if nums[mid] > nums[r] {
8-
l = mid + 1;
3+
let mut left = 0;
4+
let mut right = nums.len() - 1;
5+
while left < right {
6+
let mid = left + (right - left) / 2;
7+
if nums[mid] > nums[right] {
8+
left = mid + 1;
99
} else {
10-
r = mid;
10+
right = mid;
1111
}
1212
}
13-
nums[l]
13+
nums[left]
1414
}
1515
}

solution/0100-0199/0153.Find Minimum in Rotated Sorted Array/Solution.ts

+4-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
function findMin(nums: number[]): number {
2-
const n = nums.length;
3-
if (nums[0] <= nums[n - 1]) {
4-
return nums[0];
5-
}
6-
let left = 0,
7-
right = n - 1;
2+
let left = 0;
3+
let right = nums.length - 1;
84
while (left < right) {
9-
const mid = (left + right) >> 1;
10-
if (nums[0] <= nums[mid]) {
5+
const mid = (left + right) >>> 1;
6+
if (nums[mid] > nums[right]) {
117
left = mid + 1;
128
} else {
139
right = mid;

solution/0800-0899/0890.Find and Replace Pattern/README.md

+47
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,53 @@ func findAndReplacePattern(words []string, pattern string) []string {
146146
}
147147
```
148148

149+
### **TypeScript**
150+
151+
```ts
152+
function findAndReplacePattern(words: string[], pattern: string): string[] {
153+
return words.filter(word => {
154+
const map1 = new Map<string, number>();
155+
const map2 = new Map<string, number>();
156+
for (let i = 0; i < word.length; i++) {
157+
if (map1.get(word[i]) !== map2.get(pattern[i])) {
158+
return false;
159+
}
160+
map1.set(word[i], i);
161+
map2.set(pattern[i], i);
162+
}
163+
return true;
164+
});
165+
}
166+
```
167+
168+
### **Rust**
169+
170+
```rust
171+
use std::collections::HashMap;
172+
impl Solution {
173+
pub fn find_and_replace_pattern(words: Vec<String>, pattern: String) -> Vec<String> {
174+
let pattern = pattern.as_bytes();
175+
let n = pattern.len();
176+
words
177+
.into_iter()
178+
.filter(|word| {
179+
let word = word.as_bytes();
180+
let mut map1 = HashMap::new();
181+
let mut map2 = HashMap::new();
182+
for i in 0..n {
183+
if map1.get(&word[i]).unwrap_or(&n) != map2.get(&pattern[i]).unwrap_or(&n) {
184+
return false;
185+
}
186+
map1.insert(word[i], i);
187+
map2.insert(pattern[i], i);
188+
}
189+
true
190+
})
191+
.collect()
192+
}
193+
}
194+
```
195+
149196
### **...**
150197

151198
```

solution/0800-0899/0890.Find and Replace Pattern/README_EN.md

+47
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,53 @@ func findAndReplacePattern(words []string, pattern string) []string {
141141
}
142142
```
143143

144+
### **TypeScript**
145+
146+
```ts
147+
function findAndReplacePattern(words: string[], pattern: string): string[] {
148+
return words.filter(word => {
149+
const map1 = new Map<string, number>();
150+
const map2 = new Map<string, number>();
151+
for (let i = 0; i < word.length; i++) {
152+
if (map1.get(word[i]) !== map2.get(pattern[i])) {
153+
return false;
154+
}
155+
map1.set(word[i], i);
156+
map2.set(pattern[i], i);
157+
}
158+
return true;
159+
});
160+
}
161+
```
162+
163+
### **Rust**
164+
165+
```rust
166+
use std::collections::HashMap;
167+
impl Solution {
168+
pub fn find_and_replace_pattern(words: Vec<String>, pattern: String) -> Vec<String> {
169+
let pattern = pattern.as_bytes();
170+
let n = pattern.len();
171+
words
172+
.into_iter()
173+
.filter(|word| {
174+
let word = word.as_bytes();
175+
let mut map1 = HashMap::new();
176+
let mut map2 = HashMap::new();
177+
for i in 0..n {
178+
if map1.get(&word[i]).unwrap_or(&n) != map2.get(&pattern[i]).unwrap_or(&n) {
179+
return false;
180+
}
181+
map1.insert(word[i], i);
182+
map2.insert(pattern[i], i);
183+
}
184+
true
185+
})
186+
.collect()
187+
}
188+
}
189+
```
190+
144191
### **...**
145192

146193
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use std::collections::HashMap;
2+
impl Solution {
3+
pub fn find_and_replace_pattern(words: Vec<String>, pattern: String) -> Vec<String> {
4+
let pattern = pattern.as_bytes();
5+
let n = pattern.len();
6+
words
7+
.into_iter()
8+
.filter(|word| {
9+
let word = word.as_bytes();
10+
let mut map1 = HashMap::new();
11+
let mut map2 = HashMap::new();
12+
for i in 0..n {
13+
if map1.get(&word[i]).unwrap_or(&n) != map2.get(&pattern[i]).unwrap_or(&n) {
14+
return false;
15+
}
16+
map1.insert(word[i], i);
17+
map2.insert(pattern[i], i);
18+
}
19+
true
20+
})
21+
.collect()
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
function findAndReplacePattern(words: string[], pattern: string): string[] {
2+
return words.filter(word => {
3+
const map1 = new Map<string, number>();
4+
const map2 = new Map<string, number>();
5+
for (let i = 0; i < word.length; i++) {
6+
if (map1.get(word[i]) !== map2.get(pattern[i])) {
7+
return false;
8+
}
9+
map1.set(word[i], i);
10+
map2.set(pattern[i], i);
11+
}
12+
return true;
13+
});
14+
}

0 commit comments

Comments
 (0)