Skip to content

Commit 7e1f274

Browse files
committed
feat: add solutions to lc/lcci problems
1 parent cb9f821 commit 7e1f274

File tree

9 files changed

+275
-6
lines changed

9 files changed

+275
-6
lines changed

lcci/08.03.Magic Index/README.md

+84-2
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,48 @@
3737
<!-- 这里可写当前语言的特殊实现逻辑 -->
3838

3939
```python
40-
40+
class Solution:
41+
def findMagicIndex(self, nums: List[int]) -> int:
42+
def find(nums, left, right):
43+
if left > right:
44+
return -1
45+
mid = (left + right) >> 1
46+
left_index = find(nums, left, mid - 1)
47+
if left_index != -1:
48+
return left_index
49+
if nums[mid] == mid:
50+
return mid
51+
return find(nums, mid + 1, right)
52+
53+
return find(nums, 0, len(nums) - 1)
4154
```
4255

4356
### **Java**
4457

4558
<!-- 这里可写当前语言的特殊实现逻辑 -->
4659

4760
```java
48-
61+
class Solution {
62+
public int findMagicIndex(int[] nums) {
63+
int left = 0, right = nums.length - 1;
64+
return find(nums, left, right);
65+
}
66+
67+
private int find(int[] nums, int left, int right) {
68+
if (left > right) {
69+
return -1;
70+
}
71+
int mid = (left + right) >> 1;
72+
int leftIndex = find(nums, left, mid - 1);
73+
if (leftIndex != -1) {
74+
return leftIndex;
75+
}
76+
if (nums[mid] == mid) {
77+
return mid;
78+
}
79+
return find(nums, mid + 1, right);
80+
}
81+
}
4982
```
5083

5184
### **JavaScript**
@@ -69,6 +102,55 @@ function helper(nums, left, right) {
69102
}
70103
```
71104

105+
### **C++**
106+
107+
```cpp
108+
class Solution {
109+
public:
110+
int findMagicIndex(vector<int>& nums) {
111+
return find(nums, 0, nums.size() - 1);
112+
}
113+
114+
int find(vector<int>& nums, int left, int right) {
115+
if (left > right) {
116+
return -1;
117+
}
118+
int mid = left + right >> 1;
119+
int leftIndex = find(nums, left, mid - 1);
120+
if (leftIndex != -1) {
121+
return leftIndex;
122+
}
123+
if (nums[mid] == mid) {
124+
return mid;
125+
}
126+
return find(nums, mid + 1, right);
127+
}
128+
};
129+
```
130+
131+
### **Go**
132+
133+
```go
134+
func findMagicIndex(nums []int) int {
135+
return find(nums, 0, len(nums)-1)
136+
}
137+
138+
func find(nums []int, left, right int) int {
139+
if left > right {
140+
return -1
141+
}
142+
mid := (left + right) >> 1
143+
leftIndex := find(nums, left, mid-1)
144+
if leftIndex != -1 {
145+
return leftIndex
146+
}
147+
if nums[mid] == mid {
148+
return mid
149+
}
150+
return find(nums, mid+1, right)
151+
}
152+
```
153+
72154
### **...**
73155

74156
```

lcci/08.03.Magic Index/README_EN.md

+84-2
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,46 @@
3939
### **Python3**
4040

4141
```python
42-
42+
class Solution:
43+
def findMagicIndex(self, nums: List[int]) -> int:
44+
def find(nums, left, right):
45+
if left > right:
46+
return -1
47+
mid = (left + right) >> 1
48+
left_index = find(nums, left, mid - 1)
49+
if left_index != -1:
50+
return left_index
51+
if nums[mid] == mid:
52+
return mid
53+
return find(nums, mid + 1, right)
54+
55+
return find(nums, 0, len(nums) - 1)
4356
```
4457

4558
### **Java**
4659

4760
```java
48-
61+
class Solution {
62+
public int findMagicIndex(int[] nums) {
63+
int left = 0, right = nums.length - 1;
64+
return find(nums, left, right);
65+
}
66+
67+
private int find(int[] nums, int left, int right) {
68+
if (left > right) {
69+
return -1;
70+
}
71+
int mid = (left + right) >> 1;
72+
int leftIndex = find(nums, left, mid - 1);
73+
if (leftIndex != -1) {
74+
return leftIndex;
75+
}
76+
if (nums[mid] == mid) {
77+
return mid;
78+
}
79+
return find(nums, mid + 1, right);
80+
}
81+
}
4982
```
5083

5184
### **JavaScript**
@@ -69,6 +102,55 @@ function helper(nums, left, right) {
69102
}
70103
```
71104

105+
### **C++**
106+
107+
```cpp
108+
class Solution {
109+
public:
110+
int findMagicIndex(vector<int>& nums) {
111+
return find(nums, 0, nums.size() - 1);
112+
}
113+
114+
int find(vector<int>& nums, int left, int right) {
115+
if (left > right) {
116+
return -1;
117+
}
118+
int mid = left + right >> 1;
119+
int leftIndex = find(nums, left, mid - 1);
120+
if (leftIndex != -1) {
121+
return leftIndex;
122+
}
123+
if (nums[mid] == mid) {
124+
return mid;
125+
}
126+
return find(nums, mid + 1, right);
127+
}
128+
};
129+
```
130+
131+
### **Go**
132+
133+
```go
134+
func findMagicIndex(nums []int) int {
135+
return find(nums, 0, len(nums)-1)
136+
}
137+
138+
func find(nums []int, left, right int) int {
139+
if left > right {
140+
return -1
141+
}
142+
mid := (left + right) >> 1
143+
leftIndex := find(nums, left, mid-1)
144+
if leftIndex != -1 {
145+
return leftIndex
146+
}
147+
if nums[mid] == mid {
148+
return mid
149+
}
150+
return find(nums, mid+1, right)
151+
}
152+
```
153+
72154
### **...**
73155

74156
```

lcci/08.03.Magic Index/Solution.cpp

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
int findMagicIndex(vector<int>& nums) {
4+
return find(nums, 0, nums.size() - 1);
5+
}
6+
7+
int find(vector<int>& nums, int left, int right) {
8+
if (left > right) {
9+
return -1;
10+
}
11+
int mid = left + right >> 1;
12+
int leftIndex = find(nums, left, mid - 1);
13+
if (leftIndex != -1) {
14+
return leftIndex;
15+
}
16+
if (nums[mid] == mid) {
17+
return mid;
18+
}
19+
return find(nums, mid + 1, right);
20+
}
21+
};

lcci/08.03.Magic Index/Solution.go

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
func findMagicIndex(nums []int) int {
2+
return find(nums, 0, len(nums)-1)
3+
}
4+
5+
func find(nums []int, left, right int) int {
6+
if left > right {
7+
return -1
8+
}
9+
mid := (left + right) >> 1
10+
leftIndex := find(nums, left, mid-1)
11+
if leftIndex != -1 {
12+
return leftIndex
13+
}
14+
if nums[mid] == mid {
15+
return mid
16+
}
17+
return find(nums, mid+1, right)
18+
}

lcci/08.03.Magic Index/Solution.java

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public int findMagicIndex(int[] nums) {
3+
int left = 0, right = nums.length - 1;
4+
return find(nums, left, right);
5+
}
6+
7+
private int find(int[] nums, int left, int right) {
8+
if (left > right) {
9+
return -1;
10+
}
11+
int mid = (left + right) >> 1;
12+
int leftIndex = find(nums, left, mid - 1);
13+
if (leftIndex != -1) {
14+
return leftIndex;
15+
}
16+
if (nums[mid] == mid) {
17+
return mid;
18+
}
19+
return find(nums, mid + 1, right);
20+
}
21+
}

lcci/08.03.Magic Index/Solution.py

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def findMagicIndex(self, nums: List[int]) -> int:
3+
def find(nums, left, right):
4+
if left > right:
5+
return -1
6+
mid = (left + right) >> 1
7+
left_index = find(nums, left, mid - 1)
8+
if left_index != -1:
9+
return left_index
10+
if nums[mid] == mid:
11+
return mid
12+
return find(nums, mid + 1, right)
13+
14+
return find(nums, 0, len(nums) - 1)

solution/1600-1699/1699.Number of Calls Between Two Persons/README.md

+11-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,17 @@ from_id != to_id
6666
### **SQL**
6767

6868
```sql
69-
69+
# Write your MySQL query statement below
70+
SELECT
71+
from_id AS person1,
72+
to_id AS person2,
73+
COUNT(1) AS call_count,
74+
SUM(duration) AS total_duration
75+
FROM
76+
Calls
77+
GROUP BY
78+
LEAST(from_id, to_id),
79+
GREATEST(from_id, to_id);
7080
```
7181

7282
<!-- tabs:end -->

solution/1600-1699/1699.Number of Calls Between Two Persons/README_EN.md

+11-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,17 @@ Users 3 and 4 had 4 calls and the total duration is 999 (100 + 200 + 200 + 499).
6464
### **SQL**
6565

6666
```sql
67-
67+
# Write your MySQL query statement below
68+
SELECT
69+
from_id AS person1,
70+
to_id AS person2,
71+
COUNT(1) AS call_count,
72+
SUM(duration) AS total_duration
73+
FROM
74+
Calls
75+
GROUP BY
76+
LEAST(from_id, to_id),
77+
GREATEST(from_id, to_id);
6878
```
6979

7080
<!-- tabs:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Write your MySQL query statement below
2+
SELECT
3+
from_id AS person1,
4+
to_id AS person2,
5+
COUNT(1) AS call_count,
6+
SUM(duration) AS total_duration
7+
FROM
8+
Calls
9+
GROUP BY
10+
LEAST(from_id, to_id),
11+
GREATEST(from_id, to_id);

0 commit comments

Comments
 (0)