From 68bfa435559fa6dd05b3f0aa9f0e6ed9b322e28c Mon Sep 17 00:00:00 2001 From: Lanre Adedara Date: Mon, 18 Nov 2024 09:31:57 +0100 Subject: [PATCH 1/4] feat: add swift implementation to lcp problem: No.22 (#3772) --- .../README.md" | 35 +++++++++++++++++++ .../Solution.swift" | 30 ++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 "lcp/LCP 22. \351\273\221\347\231\275\346\226\271\346\240\274\347\224\273/Solution.swift" diff --git "a/lcp/LCP 22. \351\273\221\347\231\275\346\226\271\346\240\274\347\224\273/README.md" "b/lcp/LCP 22. \351\273\221\347\231\275\346\226\271\346\240\274\347\224\273/README.md" index 92ac9d2fb7720..683c73c8e8a73 100644 --- "a/lcp/LCP 22. \351\273\221\347\231\275\346\226\271\346\240\274\347\224\273/README.md" +++ "b/lcp/LCP 22. \351\273\221\347\231\275\346\226\271\346\240\274\347\224\273/README.md" @@ -195,6 +195,41 @@ function paintingPlan(n: number, k: number): number { } ``` +#### Swift + +```swift +class Solution { + func paintingPlan(_ n: Int, _ k: Int) -> Int { + if k == 0 || k == n * n { + return 1 + } + + func combination(_ n: Int, _ r: Int) -> Int { + guard r <= n else { return 0 } + if r == 0 || r == n { return 1 } + var result = 1 + for i in 0.. diff --git "a/lcp/LCP 22. \351\273\221\347\231\275\346\226\271\346\240\274\347\224\273/Solution.swift" "b/lcp/LCP 22. \351\273\221\347\231\275\346\226\271\346\240\274\347\224\273/Solution.swift" new file mode 100644 index 0000000000000..cce487d748515 --- /dev/null +++ "b/lcp/LCP 22. \351\273\221\347\231\275\346\226\271\346\240\274\347\224\273/Solution.swift" @@ -0,0 +1,30 @@ +class Solution { + func paintingPlan(_ n: Int, _ k: Int) -> Int { + if k == 0 || k == n * n { + return 1 + } + + func combination(_ n: Int, _ r: Int) -> Int { + guard r <= n else { return 0 } + if r == 0 || r == n { return 1 } + var result = 1 + for i in 0.. Date: Mon, 18 Nov 2024 09:32:05 +0100 Subject: [PATCH 2/4] feat: add swift implementation to lcp problem: No.24 (#3773) --- .../README.md" | 75 +++++++++++++++++++ .../Solution.swift" | 70 +++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 "lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/Solution.swift" diff --git "a/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/README.md" "b/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/README.md" index e6afadc06a0fd..986797a81ac1d 100644 --- "a/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/README.md" +++ "b/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/README.md" @@ -307,6 +307,81 @@ func (h *hp) Pop() any { } ``` +#### Swift + +```swift +class MedianFinder { + private var lowerHeap: [Int] = [] + private var upperHeap: [Int] = [] + private let mod = 1_000_000_007 + private var sumLower = 0 + private var sumUpper = 0 + + init() {} + + func addNum(_ num: Int) { + + upperHeap.append(num) + sumUpper += num + upperHeap.sort() + + + if let minUpper = upperHeap.first { + upperHeap.removeFirst() + lowerHeap.append(minUpper) + sumUpper -= minUpper + sumLower += minUpper + lowerHeap.sort(by: >) + } + + + if lowerHeap.count > upperHeap.count + 1 { + if let maxLower = lowerHeap.first { + lowerHeap.removeFirst() + upperHeap.append(maxLower) + sumLower -= maxLower + sumUpper += maxLower + upperHeap.sort() + } + } + } + + func findMedian() -> Int { + if lowerHeap.count > upperHeap.count { + return lowerHeap.first ?? 0 + } else if let minUpper = upperHeap.first, let maxLower = lowerHeap.first { + return (minUpper + maxLower) / 2 + } + return 0 + } + + func cal() -> Int { + let median = findMedian() + var result = (sumUpper - median * upperHeap.count) + (median * lowerHeap.count - sumLower) + result %= mod + if result < 0 { + result += mod + } + return Int(result) + } +} + +class Solution { + func numsGame(_ nums: [Int]) -> [Int] { + let n = nums.count + var result = [Int]() + let finder = MedianFinder() + + for i in 0.. diff --git "a/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/Solution.swift" "b/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/Solution.swift" new file mode 100644 index 0000000000000..ab634a1bb321d --- /dev/null +++ "b/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/Solution.swift" @@ -0,0 +1,70 @@ +class MedianFinder { + private var lowerHeap: [Int] = [] + private var upperHeap: [Int] = [] + private let mod = 1_000_000_007 + private var sumLower = 0 + private var sumUpper = 0 + + init() {} + + func addNum(_ num: Int) { + + upperHeap.append(num) + sumUpper += num + upperHeap.sort() + + + if let minUpper = upperHeap.first { + upperHeap.removeFirst() + lowerHeap.append(minUpper) + sumUpper -= minUpper + sumLower += minUpper + lowerHeap.sort(by: >) + } + + + if lowerHeap.count > upperHeap.count + 1 { + if let maxLower = lowerHeap.first { + lowerHeap.removeFirst() + upperHeap.append(maxLower) + sumLower -= maxLower + sumUpper += maxLower + upperHeap.sort() + } + } + } + + func findMedian() -> Int { + if lowerHeap.count > upperHeap.count { + return lowerHeap.first ?? 0 + } else if let minUpper = upperHeap.first, let maxLower = lowerHeap.first { + return (minUpper + maxLower) / 2 + } + return 0 + } + + func cal() -> Int { + let median = findMedian() + var result = (sumUpper - median * upperHeap.count) + (median * lowerHeap.count - sumLower) + result %= mod + if result < 0 { + result += mod + } + return Int(result) + } +} + +class Solution { + func numsGame(_ nums: [Int]) -> [Int] { + let n = nums.count + var result = [Int]() + let finder = MedianFinder() + + for i in 0.. Date: Mon, 18 Nov 2024 09:32:16 +0100 Subject: [PATCH 3/4] feat: add swift implementation to lcp problem: No.25 (#3774) --- .../README.md" | 35 +++++++++++++++++++ .../Solution.swift" | 30 ++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 "lcp/LCP 25. \345\217\244\350\221\243\351\224\256\347\233\230/Solution.swift" diff --git "a/lcp/LCP 25. \345\217\244\350\221\243\351\224\256\347\233\230/README.md" "b/lcp/LCP 25. \345\217\244\350\221\243\351\224\256\347\233\230/README.md" index 0fc09493e32f4..4b74397330c70 100644 --- "a/lcp/LCP 25. \345\217\244\350\221\243\351\224\256\347\233\230/README.md" +++ "b/lcp/LCP 25. \345\217\244\350\221\243\351\224\256\347\233\230/README.md" @@ -193,6 +193,41 @@ function keyboard(k: number, n: number): number { } ``` +#### Swift + +```swift +class Solution { + func keyboard(_ k: Int, _ n: Int) -> Int { + let mod = 1_000_000_007 + var c = Array(repeating: Array(repeating: 0, count: k + 1), count: n + 1) + for i in 0...n { + c[i][0] = 1 + } + + for i in 1...n { + for j in 1...k { + c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod + } + } + + var f = Array(repeating: Array(repeating: 0, count: 27), count: n + 1) + for j in 0..<27 { + f[0][j] = 1 + } + + for i in 1...n { + for j in 1..<27 { + for h in 0...min(i, k) { + f[i][j] = (f[i][j] + (f[i - h][j - 1] * c[i][h]) % mod) % mod + } + } + } + + return f[n][26] + } +} +``` + diff --git "a/lcp/LCP 25. \345\217\244\350\221\243\351\224\256\347\233\230/Solution.swift" "b/lcp/LCP 25. \345\217\244\350\221\243\351\224\256\347\233\230/Solution.swift" new file mode 100644 index 0000000000000..195504b9dbbc6 --- /dev/null +++ "b/lcp/LCP 25. \345\217\244\350\221\243\351\224\256\347\233\230/Solution.swift" @@ -0,0 +1,30 @@ +class Solution { + func keyboard(_ k: Int, _ n: Int) -> Int { + let mod = 1_000_000_007 + var c = Array(repeating: Array(repeating: 0, count: k + 1), count: n + 1) + for i in 0...n { + c[i][0] = 1 + } + + for i in 1...n { + for j in 1...k { + c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod + } + } + + var f = Array(repeating: Array(repeating: 0, count: 27), count: n + 1) + for j in 0..<27 { + f[0][j] = 1 + } + + for i in 1...n { + for j in 1..<27 { + for h in 0...min(i, k) { + f[i][j] = (f[i][j] + (f[i - h][j - 1] * c[i][h]) % mod) % mod + } + } + } + + return f[n][26] + } +} \ No newline at end of file From 9430a954837773b95b34333d455552ef7e48b644 Mon Sep 17 00:00:00 2001 From: Lanre Adedara Date: Mon, 18 Nov 2024 09:32:32 +0100 Subject: [PATCH 4/4] feat: add swift implementation to lcp problem: No.28 (#3775) --- .../README.md" | 25 +++++++++++++++++++ .../Solution.swift" | 20 +++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 "lcp/LCP 28. \351\207\207\350\264\255\346\226\271\346\241\210/Solution.swift" diff --git "a/lcp/LCP 28. \351\207\207\350\264\255\346\226\271\346\241\210/README.md" "b/lcp/LCP 28. \351\207\207\350\264\255\346\226\271\346\241\210/README.md" index db74c352935f0..badc772c450f3 100644 --- "a/lcp/LCP 28. \351\207\207\350\264\255\346\226\271\346\241\210/README.md" +++ "b/lcp/LCP 28. \351\207\207\350\264\255\346\226\271\346\241\210/README.md" @@ -123,6 +123,31 @@ func purchasePlans(nums []int, target int) int { } ``` +#### Swift + +```swift +class Solution { + func purchasePlans(_ nums: [Int], _ target: Int) -> Int { + let mod = 1_000_000_007 + let nums = nums.sorted() + var res = 0 + var i = 0 + var j = nums.count - 1 + + while i < j { + if nums[i] + nums[j] > target { + j -= 1 + } else { + res = (res + j - i) % mod + i += 1 + } + } + + return res + } +} +``` + diff --git "a/lcp/LCP 28. \351\207\207\350\264\255\346\226\271\346\241\210/Solution.swift" "b/lcp/LCP 28. \351\207\207\350\264\255\346\226\271\346\241\210/Solution.swift" new file mode 100644 index 0000000000000..73add5edd350f --- /dev/null +++ "b/lcp/LCP 28. \351\207\207\350\264\255\346\226\271\346\241\210/Solution.swift" @@ -0,0 +1,20 @@ +class Solution { + func purchasePlans(_ nums: [Int], _ target: Int) -> Int { + let mod = 1_000_000_007 + let nums = nums.sorted() + var res = 0 + var i = 0 + var j = nums.count - 1 + + while i < j { + if nums[i] + nums[j] > target { + j -= 1 + } else { + res = (res + j - i) % mod + i += 1 + } + } + + return res + } +} \ No newline at end of file