File tree Expand file tree Collapse file tree 2 files changed +109
-0
lines changed Expand file tree Collapse file tree 2 files changed +109
-0
lines changed Original file line number Diff line number Diff line change @@ -312,6 +312,63 @@ public class Solution {
312
312
}
313
313
```
314
314
315
+ #### Swift
316
+
317
+ ``` swift
318
+ class Solution {
319
+ private var nums: [Int ] = []
320
+ private var temp: [Int ] = []
321
+
322
+ func reversePairs (_ nums : [Int ]) -> Int {
323
+ self .nums = nums
324
+ let n = nums.count
325
+ self .temp = [Int ](repeating : 0 , count : n)
326
+ return mergeSort (0 , n - 1 )
327
+ }
328
+
329
+ private func mergeSort (_ left : Int , _ right : Int ) -> Int {
330
+ if left >= right {
331
+ return 0
332
+ }
333
+ let mid = (left + right) / 2
334
+ var count = mergeSort (left, mid) + mergeSort (mid + 1 , right)
335
+ var i = left
336
+ var j = mid + 1
337
+ var k = left
338
+
339
+ while i <= mid && j <= right {
340
+ if nums[i] <= nums[j] {
341
+ temp[k] = nums[i]
342
+ i += 1
343
+ } else {
344
+ count += mid - i + 1
345
+ temp[k] = nums[j]
346
+ j += 1
347
+ }
348
+ k += 1
349
+ }
350
+
351
+ while i <= mid {
352
+ temp[k] = nums[i]
353
+ i += 1
354
+ k += 1
355
+ }
356
+
357
+ while j <= right {
358
+ temp[k] = nums[j]
359
+ j += 1
360
+ k += 1
361
+ }
362
+
363
+ for i in left... right {
364
+ nums[i] = temp[i]
365
+ }
366
+
367
+ return count
368
+ }
369
+ }
370
+ ```
371
+
315
372
<!-- tabs: end -->
316
373
317
374
<!-- solution: end -->
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ private var nums : [ Int ] = [ ]
3
+ private var temp : [ Int ] = [ ]
4
+
5
+ func reversePairs( _ nums: [ Int ] ) -> Int {
6
+ self . nums = nums
7
+ let n = nums. count
8
+ self . temp = [ Int] ( repeating: 0 , count: n)
9
+ return mergeSort ( 0 , n - 1 )
10
+ }
11
+
12
+ private func mergeSort( _ left: Int , _ right: Int ) -> Int {
13
+ if left >= right {
14
+ return 0
15
+ }
16
+ let mid = ( left + right) / 2
17
+ var count = mergeSort ( left, mid) + mergeSort( mid + 1 , right)
18
+ var i = left
19
+ var j = mid + 1
20
+ var k = left
21
+
22
+ while i <= mid && j <= right {
23
+ if nums [ i] <= nums [ j] {
24
+ temp [ k] = nums [ i]
25
+ i += 1
26
+ } else {
27
+ count += mid - i + 1
28
+ temp [ k] = nums [ j]
29
+ j += 1
30
+ }
31
+ k += 1
32
+ }
33
+
34
+ while i <= mid {
35
+ temp [ k] = nums [ i]
36
+ i += 1
37
+ k += 1
38
+ }
39
+
40
+ while j <= right {
41
+ temp [ k] = nums [ j]
42
+ j += 1
43
+ k += 1
44
+ }
45
+
46
+ for i in left... right {
47
+ nums [ i] = temp [ i]
48
+ }
49
+
50
+ return count
51
+ }
52
+ }
You can’t perform that action at this time.
0 commit comments