diff --git "a/lcof/\351\235\242\350\257\225\351\242\23051. \346\225\260\347\273\204\344\270\255\347\232\204\351\200\206\345\272\217\345\257\271/README.md" "b/lcof/\351\235\242\350\257\225\351\242\23051. \346\225\260\347\273\204\344\270\255\347\232\204\351\200\206\345\272\217\345\257\271/README.md" index 12f5176d38895..d86c8a9258948 100644 --- "a/lcof/\351\235\242\350\257\225\351\242\23051. \346\225\260\347\273\204\344\270\255\347\232\204\351\200\206\345\272\217\345\257\271/README.md" +++ "b/lcof/\351\235\242\350\257\225\351\242\23051. \346\225\260\347\273\204\344\270\255\347\232\204\351\200\206\345\272\217\345\257\271/README.md" @@ -312,6 +312,63 @@ public class Solution { } ``` +#### Swift + +```swift +class Solution { + private var nums: [Int] = [] + private var temp: [Int] = [] + + func reversePairs(_ nums: [Int]) -> Int { + self.nums = nums + let n = nums.count + self.temp = [Int](repeating: 0, count: n) + return mergeSort(0, n - 1) + } + + private func mergeSort(_ left: Int, _ right: Int) -> Int { + if left >= right { + return 0 + } + let mid = (left + right) / 2 + var count = mergeSort(left, mid) + mergeSort(mid + 1, right) + var i = left + var j = mid + 1 + var k = left + + while i <= mid && j <= right { + if nums[i] <= nums[j] { + temp[k] = nums[i] + i += 1 + } else { + count += mid - i + 1 + temp[k] = nums[j] + j += 1 + } + k += 1 + } + + while i <= mid { + temp[k] = nums[i] + i += 1 + k += 1 + } + + while j <= right { + temp[k] = nums[j] + j += 1 + k += 1 + } + + for i in left...right { + nums[i] = temp[i] + } + + return count + } +} +``` + diff --git "a/lcof/\351\235\242\350\257\225\351\242\23051. \346\225\260\347\273\204\344\270\255\347\232\204\351\200\206\345\272\217\345\257\271/Solution.swift" "b/lcof/\351\235\242\350\257\225\351\242\23051. \346\225\260\347\273\204\344\270\255\347\232\204\351\200\206\345\272\217\345\257\271/Solution.swift" new file mode 100644 index 0000000000000..19187cb6cb6df --- /dev/null +++ "b/lcof/\351\235\242\350\257\225\351\242\23051. \346\225\260\347\273\204\344\270\255\347\232\204\351\200\206\345\272\217\345\257\271/Solution.swift" @@ -0,0 +1,52 @@ +class Solution { + private var nums: [Int] = [] + private var temp: [Int] = [] + + func reversePairs(_ nums: [Int]) -> Int { + self.nums = nums + let n = nums.count + self.temp = [Int](repeating: 0, count: n) + return mergeSort(0, n - 1) + } + + private func mergeSort(_ left: Int, _ right: Int) -> Int { + if left >= right { + return 0 + } + let mid = (left + right) / 2 + var count = mergeSort(left, mid) + mergeSort(mid + 1, right) + var i = left + var j = mid + 1 + var k = left + + while i <= mid && j <= right { + if nums[i] <= nums[j] { + temp[k] = nums[i] + i += 1 + } else { + count += mid - i + 1 + temp[k] = nums[j] + j += 1 + } + k += 1 + } + + while i <= mid { + temp[k] = nums[i] + i += 1 + k += 1 + } + + while j <= right { + temp[k] = nums[j] + j += 1 + k += 1 + } + + for i in left...right { + nums[i] = temp[i] + } + + return count + } +} \ No newline at end of file