Skip to content

Commit 8b2de40

Browse files
committed
add couple of solutions
1 parent 421b4e3 commit 8b2de40

File tree

21 files changed

+1142
-218
lines changed

21 files changed

+1142
-218
lines changed

Algorithm Solutions In Swift.xcodeproj/project.pbxproj

Lines changed: 204 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
import Foundation
22

3+
//************** BEGIN REVISE *************************
4+
// 1. Count And Say
5+
// 2. Is Ugly Number
6+
// 3. Sort By Parity II
7+
// 4. Missing Ranges
8+
// 5. Array Pair Sum
9+
//************** END REVISE ***************************
310

411

12+
13+
//*************** START PRACTICE *************************
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//
2+
// ArrayIntersection.swift
3+
// Algorithm Solutions In Swift
4+
//
5+
// Created by littlebanana on 17/03/26.
6+
//
7+
8+
func arraysIntersection(_ arr1: [Int], _ arr2: [Int], _ arr3: [Int]) -> [Int] {
9+
var p1 = 0, p2 = 0, p3 = 0
10+
var intersections = [Int]()
11+
while p1 < arr1.count, p2 < arr2.count, p3 < arr3.count {
12+
if arr1[p1] == arr2[p2], arr2[p2] == arr3[p3] {
13+
intersections.append(arr1[p1])
14+
p1 += 1
15+
p2 += 1
16+
p3 += 1
17+
} else {
18+
if arr1[p1] < arr2[p2] {
19+
p1 += 1
20+
} else if arr2[p2] < arr3[p3] {
21+
p2 += 1
22+
} else {
23+
p3 += 1
24+
}
25+
}
26+
}
27+
return intersections
28+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//
2+
// ArrayPairSum.swift
3+
// Algorithm Solutions In Swift
4+
//
5+
// Created by littlebanana on 17/03/26.
6+
//
7+
8+
func arrayPairSum(_ nums: [Int]) -> Int {
9+
var maxSum = 0
10+
let offset = 10000
11+
var container = Array(repeating: 0, count: 2 * offset + 1)
12+
for num in nums {
13+
container[num + offset] += 1
14+
}
15+
var pickNext = true
16+
for i in 0..<container.count {
17+
while container[i] > 0 {
18+
if pickNext {
19+
maxSum += i - offset
20+
}
21+
pickNext.toggle()
22+
container[i] -= 1
23+
}
24+
}
25+
return maxSum
26+
}
27+
28+
29+
//print(arrayPairSum([6,2,6,5,1,2]))
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// CanConstruct.swift
3+
// Algorithm Solutions In Swift
4+
//
5+
// Created by littlebanana on 17/03/26.
6+
//
7+
8+
func canConstruct(_ ransomNote: String, _ magazine: String) -> Bool {
9+
let ransomFreq = Dictionary(ransomNote.map { ($0, 1) }, uniquingKeysWith: +)
10+
let magazineFreq = Dictionary(magazine.map { ($0, 1) }, uniquingKeysWith: +)
11+
12+
for (ch, needed) in ransomFreq {
13+
if magazineFreq[ch, default: 0] < needed {
14+
return false
15+
}
16+
}
17+
return true
18+
}
19+
20+
//print(canConstruct("aa", "aab"))
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//
2+
// CountAndSay.swift
3+
// Algorithm Solutions In Swift
4+
//
5+
// Created by littlebanana on 17/03/26.
6+
//
7+
8+
func countAndSay(_ n: Int) -> String {
9+
guard n > 1 else { return "1" }
10+
var current = Array("1")
11+
for _ in 2...n {
12+
var next: [Character] = []
13+
var i = 0
14+
while i < current.count {
15+
let key = current[i]
16+
var j = i
17+
while j < current.count, current[j] == key {
18+
j += 1
19+
}
20+
let count = j - i
21+
for digit in String(count) {
22+
next.append(digit)
23+
}
24+
next.append(key)
25+
26+
i = j
27+
}
28+
current = next
29+
}
30+
return String(current)
31+
32+
}
33+
34+
35+
//print(countAndSay(15))
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//
2+
// Count Negatives.swift
3+
// Algorithm Solutions In Swift
4+
//
5+
// Created by littlebanana on 17/03/26.
6+
//
7+
8+
func countNegatives(_ grid: [[Int]]) -> Int {
9+
var count = 0
10+
for row in grid {
11+
var left = 0, right = row.count - 1
12+
var negativeIndex = -1
13+
while left <= right {
14+
let mid = (left + right) / 2
15+
if row[mid] < 0 {
16+
negativeIndex = mid
17+
right = mid - 1
18+
} else {
19+
left = mid + 1
20+
}
21+
}
22+
count += negativeIndex == -1 ? 0 : (row.count - negativeIndex)
23+
}
24+
return count
25+
}
26+
27+
//let grid = [[3, 2], [1, 0]]
28+
//print(countNegatives(grid))
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//
2+
// CountPairs.swift
3+
// Algorithm Solutions In Swift
4+
//
5+
// Created by littlebanana on 17/03/26.
6+
//
7+
8+
func countPairs(_ nums: [Int], _ target: Int) -> Int {
9+
let numbers = nums.sorted()
10+
var left = 0, right = nums.count - 1
11+
var pairs = 0
12+
while left < right {
13+
let sum = numbers[left] + numbers[right]
14+
if sum < target {
15+
pairs += (right - left)
16+
left += 1
17+
} else {
18+
right -= 1
19+
}
20+
}
21+
return pairs
22+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//
2+
// FindDifferences.swift
3+
// Algorithm Solutions In Swift
4+
//
5+
// Created by littlebanana on 17/03/26.
6+
//
7+
8+
func findTheDifference(_ s: String, _ t: String) -> Character {
9+
var sContainer: [Int] = Array(repeating: 0, count: 26)
10+
var tContainer: [Int] = Array(repeating: 0, count: 26)
11+
12+
for char in s {
13+
sContainer[Int(char.asciiValue ?? 0)%97] += 1
14+
}
15+
for char in t {
16+
tContainer[Int(char.asciiValue ?? 0)%97] += 1
17+
}
18+
var i = 0, j = 0
19+
while i < sContainer.count, j < tContainer.count {
20+
if sContainer[i] != tContainer[j] {
21+
return Character(UnicodeScalar(97+i)!)
22+
}
23+
i += 1
24+
j += 1
25+
}
26+
return Character("")
27+
}
28+
29+
func findTheDifferenceXOR(_ s: String, _ t: String) -> Character {
30+
var xorValue: UInt8 = 0
31+
for byte in s.utf8 {
32+
xorValue ^= byte
33+
}
34+
for byte in t.utf8 {
35+
xorValue ^= byte
36+
}
37+
return Character(UnicodeScalar(xorValue))
38+
}
39+
40+
//print(findTheDifferenceXOR("abcd", "abcde"))
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//
2+
// FixedPoint.swift
3+
// Algorithm Solutions In Swift
4+
//
5+
// Created by littlebanana on 17/03/26.
6+
//
7+
8+
func fixedPoint(_ arr: [Int]) -> Int {
9+
var i = 0, j = arr.count - 1
10+
var smallestIndex = arr.count
11+
while i <= j {
12+
let mid = (i + j) / 2
13+
if mid == arr[mid] {
14+
smallestIndex = min(smallestIndex, mid)
15+
j = mid - 1
16+
} else if arr[mid] < mid {
17+
i = mid + 1
18+
} else {
19+
j = mid - 1
20+
}
21+
}
22+
return smallestIndex == arr.count ? -1 : smallestIndex
23+
}
24+
25+
26+
//print(fixedPoint([-10,-5,-2,0,4,5,6,7,8,9,10]))

0 commit comments

Comments
 (0)