Skip to content

Commit fb68f57

Browse files
authored
feat: update lc problems (#3045)
1 parent 292ced6 commit fb68f57

File tree

21 files changed

+376
-135
lines changed

21 files changed

+376
-135
lines changed

lcof2/剑指 Offer II 025. 链表中的两数相加/README.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -222,36 +222,36 @@ func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
222222
* init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
223223
* }
224224
*/
225-
225+
226226
class Solution {
227227
func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
228228
var s1: [Int] = []
229229
var s2: [Int] = []
230-
230+
231231
var node1 = l1
232232
var node2 = l2
233-
233+
234234
while let n1 = node1 {
235235
s1.append(n1.val)
236236
node1 = n1.next
237237
}
238-
238+
239239
while let n2 = node2 {
240240
s2.append(n2.val)
241241
node2 = n2.next
242242
}
243-
243+
244244
var carry = 0
245245
let dummy: ListNode? = ListNode(0)
246-
246+
247247
while !s1.isEmpty || !s2.isEmpty || carry != 0 {
248248
carry += (s1.isEmpty ? 0 : s1.removeLast()) + (s2.isEmpty ? 0 : s2.removeLast())
249249
let node = ListNode(carry % 10)
250250
node.next = dummy?.next
251251
dummy?.next = node
252252
carry /= 10
253253
}
254-
254+
255255
return dummy?.next
256256
}
257257
}

lcof2/剑指 Offer II 026. 重排链表/README.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -305,15 +305,15 @@ func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
305305
class Solution {
306306
func reorderList(_ head: ListNode?) {
307307
guard let head = head else { return }
308-
308+
309309
let mid = middleNode(head)
310-
310+
311311
let secondHalf = reverseList(mid.next)
312312
mid.next = nil
313-
313+
314314
mergeTwoLists(head, secondHalf)
315315
}
316-
316+
317317
private func middleNode(_ head: ListNode?) -> ListNode {
318318
var slow = head
319319
var fast = head
@@ -323,7 +323,7 @@ class Solution {
323323
}
324324
return slow!
325325
}
326-
326+
327327
private func reverseList(_ head: ListNode?) -> ListNode? {
328328
var prev: ListNode? = nil
329329
var curr = head
@@ -335,20 +335,20 @@ class Solution {
335335
}
336336
return prev
337337
}
338-
338+
339339
private func mergeTwoLists(_ l1: ListNode?, _ l2: ListNode?) {
340340
var l1 = l1
341341
var l2 = l2
342342
while l1 != nil && l2 != nil {
343343
let l1Next = l1?.next
344344
let l2Next = l2?.next
345-
345+
346346
l1?.next = l2
347347
if l1Next == nil {
348348
break
349349
}
350350
l2?.next = l1Next
351-
351+
352352
l1 = l1Next
353353
l2 = l2Next
354354
}

lcof2/剑指 Offer II 030. 插入、删除和随机访问都是 O(1) 的容器/README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -223,12 +223,12 @@ public:
223223
class RandomizedSet {
224224
private var m: [Int: Int]
225225
private var a: [Int]
226-
226+
227227
init() {
228228
self.m = [Int: Int]()
229229
self.a = [Int]()
230230
}
231-
231+
232232
func insert(_ val: Int) -> Bool {
233233
if m[val] != nil {
234234
return false
@@ -237,7 +237,7 @@ class RandomizedSet {
237237
a.append(val)
238238
return true
239239
}
240-
240+
241241
func remove(_ val: Int) -> Bool {
242242
if let idx = m[val] {
243243
let last = a.count - 1
@@ -251,7 +251,7 @@ class RandomizedSet {
251251
}
252252
return false
253253
}
254-
254+
255255
func getRandom() -> Int {
256256
return a[Int.random(in: 0..<a.count)]
257257
}

lcof2/剑指 Offer II 032. 有效的变位词/README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -180,20 +180,20 @@ class Solution {
180180
if m != n || s == t {
181181
return false
182182
}
183-
183+
184184
var cnt = [Int](repeating: 0, count: 26)
185-
185+
186186
for (sc, tc) in zip(s, t) {
187187
cnt[Int(sc.asciiValue! - Character("a").asciiValue!)] += 1
188188
cnt[Int(tc.asciiValue! - Character("a").asciiValue!)] -= 1
189189
}
190-
190+
191191
for x in cnt {
192192
if x != 0 {
193193
return false
194194
}
195195
}
196-
196+
197197
return true
198198
}
199199
}

lcof2/剑指 Offer II 033. 变位词组/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -164,15 +164,15 @@ function groupAnagrams(strs: string[]): string[][] {
164164
class Solution {
165165
func groupAnagrams(_ strs: [String]) -> [[String]] {
166166
var d = [String: [String]]()
167-
167+
168168
for s in strs {
169169
let sortedStr = String(s.sorted())
170170
if d[sortedStr] == nil {
171171
d[sortedStr] = [String]()
172172
}
173173
d[sortedStr]!.append(s)
174174
}
175-
175+
176176
return Array(d.values)
177177
}
178178
}

lcof2/剑指 Offer II 034. 外星语言是否排序/README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -205,21 +205,21 @@ function isAlienSorted(words: string[], order: string): boolean {
205205
class Solution {
206206
func isAlienSorted(_ words: [String], _ order: String) -> Bool {
207207
var index = [Character: Int]()
208-
208+
209209
for (i, char) in order.enumerated() {
210210
index[char] = i
211211
}
212-
212+
213213
for i in 0..<words.count - 1 {
214214
let w1 = Array(words[i])
215215
let w2 = Array(words[i + 1])
216216
let l1 = w1.count
217217
let l2 = w2.count
218-
218+
219219
for j in 0..<max(l1, l2) {
220220
let i1 = j >= l1 ? -1 : index[w1[j]]!
221221
let i2 = j >= l2 ? -1 : index[w2[j]]!
222-
222+
223223
if i1 > i2 {
224224
return false
225225
}

lcof2/剑指 Offer II 035. 最小时间差/README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -175,22 +175,22 @@ class Solution {
175175
if timePoints.count > 24 * 60 {
176176
return 0
177177
}
178-
178+
179179
var mins = [Int]()
180-
180+
181181
for t in timePoints {
182182
let time = t.split(separator: ":").map { Int($0)! }
183183
mins.append(time[0] * 60 + time[1])
184184
}
185-
185+
186186
mins.sort()
187187
mins.append(mins[0] + 24 * 60)
188-
188+
189189
var ans = Int.max
190190
for i in 1..<mins.count {
191191
ans = min(ans, mins[i] - mins[i - 1])
192192
}
193-
193+
194194
return ans
195195
}
196196
}

solution/0000-0099/0088.Merge Sorted Array/README.md

+13-35
Original file line numberDiff line numberDiff line change
@@ -157,46 +157,24 @@ function merge(nums1: number[], m: number, nums2: number[], n: number): void {
157157
}
158158
```
159159

160-
#### TypeScript
161-
162-
```ts
163-
/**
164-
Do not return anything, modify nums1 in-place instead.
165-
*/
166-
function merge(nums1: number[], m: number, nums2: number[], n: number): void {
167-
nums1.length = m;
168-
nums2.length = n;
169-
nums1.push(...nums2);
170-
nums1.sort((a, b) => a - b);
171-
}
172-
```
173-
174160
#### Rust
175161

176162
```rust
177163
impl Solution {
178164
pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
179-
let (mut m, mut n) = (m as usize, n as usize);
180-
for i in (0..m + n).rev() {
181-
nums1[i] = match (m == 0, n == 0) {
182-
(true, false) => {
183-
n -= 1;
184-
nums2[n]
185-
}
186-
(false, true) => {
187-
m -= 1;
188-
nums1[m]
189-
}
190-
(_, _) => {
191-
if nums1[m - 1] > nums2[n - 1] {
192-
m -= 1;
193-
nums1[m]
194-
} else {
195-
n -= 1;
196-
nums2[n]
197-
}
198-
}
199-
};
165+
let mut k = (m + n - 1) as usize;
166+
let mut i = (m - 1) as isize;
167+
let mut j = (n - 1) as isize;
168+
169+
while j >= 0 {
170+
if i >= 0 && nums1[i as usize] > nums2[j as usize] {
171+
nums1[k] = nums1[i as usize];
172+
i -= 1;
173+
} else {
174+
nums1[k] = nums2[j as usize];
175+
j -= 1;
176+
}
177+
k -= 1;
200178
}
201179
}
202180
}

solution/0000-0099/0088.Merge Sorted Array/README_EN.md

+13-35
Original file line numberDiff line numberDiff line change
@@ -154,46 +154,24 @@ function merge(nums1: number[], m: number, nums2: number[], n: number): void {
154154
}
155155
```
156156

157-
#### TypeScript
158-
159-
```ts
160-
/**
161-
Do not return anything, modify nums1 in-place instead.
162-
*/
163-
function merge(nums1: number[], m: number, nums2: number[], n: number): void {
164-
nums1.length = m;
165-
nums2.length = n;
166-
nums1.push(...nums2);
167-
nums1.sort((a, b) => a - b);
168-
}
169-
```
170-
171157
#### Rust
172158

173159
```rust
174160
impl Solution {
175161
pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
176-
let (mut m, mut n) = (m as usize, n as usize);
177-
for i in (0..m + n).rev() {
178-
nums1[i] = match (m == 0, n == 0) {
179-
(true, false) => {
180-
n -= 1;
181-
nums2[n]
182-
}
183-
(false, true) => {
184-
m -= 1;
185-
nums1[m]
186-
}
187-
(_, _) => {
188-
if nums1[m - 1] > nums2[n - 1] {
189-
m -= 1;
190-
nums1[m]
191-
} else {
192-
n -= 1;
193-
nums2[n]
194-
}
195-
}
196-
};
162+
let mut k = (m + n - 1) as usize;
163+
let mut i = (m - 1) as isize;
164+
let mut j = (n - 1) as isize;
165+
166+
while j >= 0 {
167+
if i >= 0 && nums1[i as usize] > nums2[j as usize] {
168+
nums1[k] = nums1[i as usize];
169+
i -= 1;
170+
} else {
171+
nums1[k] = nums2[j as usize];
172+
j -= 1;
173+
}
174+
k -= 1;
197175
}
198176
}
199177
}
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,18 @@
11
impl Solution {
22
pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
3-
let (mut m, mut n) = (m as usize, n as usize);
4-
for i in (0..m + n).rev() {
5-
nums1[i] = match (m == 0, n == 0) {
6-
(true, false) => {
7-
n -= 1;
8-
nums2[n]
9-
}
10-
(false, true) => {
11-
m -= 1;
12-
nums1[m]
13-
}
14-
(_, _) => {
15-
if nums1[m - 1] > nums2[n - 1] {
16-
m -= 1;
17-
nums1[m]
18-
} else {
19-
n -= 1;
20-
nums2[n]
21-
}
22-
}
23-
};
3+
let mut k = (m + n - 1) as usize;
4+
let mut i = (m - 1) as isize;
5+
let mut j = (n - 1) as isize;
6+
7+
while j >= 0 {
8+
if i >= 0 && nums1[i as usize] > nums2[j as usize] {
9+
nums1[k] = nums1[i as usize];
10+
i -= 1;
11+
} else {
12+
nums1[k] = nums2[j as usize];
13+
j -= 1;
14+
}
15+
k -= 1;
2416
}
2517
}
2618
}

solution/0000-0099/0088.Merge Sorted Array/Solution2.ts

-9
This file was deleted.

0 commit comments

Comments
 (0)