Skip to content

Commit e3fa44a

Browse files
committed
feat: update solutions to lcci problem: No.08.03
No.08.03.Magic Index
1 parent af33175 commit e3fa44a

File tree

2 files changed

+28
-36
lines changed

2 files changed

+28
-36
lines changed

lcci/08.03.Magic Index/README.md

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -157,22 +157,20 @@ func find(nums []int, left, right int) int {
157157
function findMagicIndex(nums: number[]): number {
158158
const n = nums.length;
159159
const find = (l: number, r: number): number => {
160-
if (l > r) {
160+
if (l > r || nums[r] < 0) {
161161
return -1;
162162
}
163163
const mid = l + Math.floor((r - l) / 2);
164-
const l_res = find(l, mid - 1);
165-
if (l_res !== -1) {
166-
return l_res;
164+
if (nums[mid] >= l) {
165+
const res = find(l, mid - 1);
166+
if (res !== -1) {
167+
return res;
168+
}
167169
}
168170
if (nums[mid] === mid) {
169171
return mid;
170172
}
171-
const r_res = find(mid + 1, r);
172-
if (r_res !== -1) {
173-
return r_res;
174-
}
175-
return -1;
173+
return find(mid + 1, r);
176174
};
177175
return find(0, n - 1);
178176
}
@@ -197,22 +195,20 @@ function findMagicIndex(nums: number[]): number {
197195
```rust
198196
impl Solution {
199197
fn find(nums: &Vec<i32>, l: usize, r: usize) -> i32 {
200-
if l >= r {
198+
if l >= r || nums[r - 1] < 0 {
201199
return -1;
202200
}
203201
let mid = l + (r - l) / 2;
204-
let l_res = Self::find(nums, l, mid);
205-
if l_res != -1 {
206-
return l_res;
202+
if nums[mid] >= l as i32 {
203+
let res = Self::find(nums, l, mid);
204+
if res != -1 {
205+
return res;
206+
}
207207
}
208208
if nums[mid] == mid as i32 {
209209
return mid as i32;
210210
}
211-
let r_res = Self::find(nums, mid + 1, r);
212-
if r_res != -1 {
213-
return r_res;
214-
}
215-
-1
211+
Self::find(nums, mid + 1, r)
216212
}
217213

218214
pub fn find_magic_index(nums: Vec<i32>) -> i32 {

lcci/08.03.Magic Index/README_EN.md

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -157,22 +157,20 @@ func find(nums []int, left, right int) int {
157157
function findMagicIndex(nums: number[]): number {
158158
const n = nums.length;
159159
const find = (l: number, r: number): number => {
160-
if (l > r) {
160+
if (l > r || nums[r] < 0) {
161161
return -1;
162162
}
163163
const mid = l + Math.floor((r - l) / 2);
164-
const l_res = find(l, mid - 1);
165-
if (l_res !== -1) {
166-
return l_res;
164+
if (nums[mid] >= l) {
165+
const res = find(l, mid - 1);
166+
if (res !== -1) {
167+
return res;
168+
}
167169
}
168170
if (nums[mid] === mid) {
169171
return mid;
170172
}
171-
const r_res = find(mid + 1, r);
172-
if (r_res !== -1) {
173-
return r_res;
174-
}
175-
return -1;
173+
return find(mid + 1, r);
176174
};
177175
return find(0, n - 1);
178176
}
@@ -197,22 +195,20 @@ function findMagicIndex(nums: number[]): number {
197195
```rust
198196
impl Solution {
199197
fn find(nums: &Vec<i32>, l: usize, r: usize) -> i32 {
200-
if l >= r {
198+
if l >= r || nums[r - 1] < 0 {
201199
return -1;
202200
}
203201
let mid = l + (r - l) / 2;
204-
let l_res = Self::find(nums, l, mid);
205-
if l_res != -1 {
206-
return l_res;
202+
if nums[mid] >= l as i32 {
203+
let res = Self::find(nums, l, mid);
204+
if res != -1 {
205+
return res;
206+
}
207207
}
208208
if nums[mid] == mid as i32 {
209209
return mid as i32;
210210
}
211-
let r_res = Self::find(nums, mid + 1, r);
212-
if r_res != -1 {
213-
return r_res;
214-
}
215-
-1
211+
Self::find(nums, mid + 1, r)
216212
}
217213

218214
pub fn find_magic_index(nums: Vec<i32>) -> i32 {

0 commit comments

Comments
 (0)