Missing Number - Inner Loop
var arr = [3, 0, 1]
let res = arr
for i in 0...arr.count {
if !res.contains(i) {
print(i) // 2
}
}
Missing Number - Hash Set
var arr = [3, 0, 1]
let set = Set(arr)
for i in 0...arr.count {
if !set.contains(i) {
print(i) // 2
}
}
Missing Number - Better Solution: Sum Formula (O(n))
func missingNumber(_ nums: [Int]) -> Int {
let n = nums.count
let expectedSum = n * (n + 1) / 2
let actualSum = nums.reduce(0, +)
return expectedSum - actualSum
}
Unique Numbers
let nums = [1, 2, 3, 2, 4, 1, 5]
var uniqueNumbers = [Int]()
for num in nums {
if !uniqueNumbers.contains(num) {
uniqueNumbers.append(num)
}
}
print(uniqueNumbers) // [1, 2, 3, 4, 5]
Contains Duplicate - Inner Loop
let arr = [1, 2, 3, 1]
for i in 0..<arr.count {
for j in i+1..<arr.count {
if arr[i] == arr[j] {
print(arr[i]) // 1
}
}
}
Contains Duplicate - Better Solution: Hash Set
let nums = [1, 2, 3, 1]
var set = Set<Int>()
func containsDuplicate(_ arr: [Int]) -> Int {
for num in arr {
if set.contains(num) {
return num
}
set.insert(num)
}
return -1
}
let res = containsDuplicate(nums)
print(res)
Sum of digit - Inner Loop
let nums = [3, 0, 1]
var sum = 0
for num in nums {
sum = sum + num
}
print(sum) // 4
Sum of digit - High Order Function
let nums = [3, 0, 1]
let actualSum = nums.reduce(0, +)
print(actualSum)
Reverse Number
var number = 123
var reversed = 0
while number > 0 {
let remainder = number % 10
reversed = (reversed * 10) + remainder
number /= 10
}
print(reversed) // 321
Two Sum - Inner Loop
let arr = [2, 7, 11, 15]
let target = 9
for i in 0..<arr.count {
for j in i+1..<arr.count {
if arr[i] + arr[j] == target {
print("\(i), \(j)") // 0, 1
}
}
}
Two Sum - Hash Map
let arr = [2, 7, 11, 15]
let target = 9
var dict = [Int:Int]()
for (index, num) in arr.enumerated() {
let complement = target - num
if let prevIndex = dict[complement] {
print("\(prevIndex), \(index)") // 0, 1
}
dict[num] = index
}
Merge Two Sorted Array - Inner Loop
let arr1 = [1, 2, 3]
let arr2 = [4, 5, 6]
var resultArray = [Int]()
for num in arr1 {
resultArray.append(num)
}
for num in arr2 {
resultArray.append(num)
}
print(resultArray) // [1, 2, 3, 4, 5, 6]
Stack Implementation
class Stack {
private var items: [Int] = []
// Push
func push(_ value: Int) {
items.append(value)
}
// Pop
func pop() -> Int? {
return items.popLast()
}
// Top(Peek)
func top() -> Int? {
return items.last
}
// Check Empty
func isEmpty() -> Bool {
return items.isEmpty
}
// Size
func size() -> Int {
return items.count
}
}
let stack = Stack()
stack.push(10)
stack.push(20)
stack.push(30)
print(stack.top()!) // 30
print(stack.pop()!) // 30
print(stack.top()!) // 20
print(stack.size()) // 2
print(stack.isEmpty())
Strings: Reverse String
let name = "Hey! Swift"
var rev = ""
for s in name {
rev = String(s) + rev
}
print(rev) // tfiwS !yeH
Strings: Reverse Word
let name = "Hey! Swift How are you?"
var rev = ""
var result = ""
for s in name {
if s == " " {
result = rev + " " + result
rev = ""
} else {
rev += String(s)
}
}
result = rev + " " + result
print(result) // you? are How Swift Hey!
Extract word from array
var names = ["iOS Development Swift", "android Development Kotlin"]
var words = [String]()
var myword = ""
for str in names {
let word = str.split(separator: " ")
for char in word {
print(char)
}
}
// iOS
// Development
// Swift
// android
// Development
// Kotlin
Max Number
let nums = [2, 8, 4, 9, 3]
var max = nums[0]
for num in nums {
if num > max {
max = num
}
}
print(max) // 9
Min Number
let nums = [2, 8, 4, 9, 3]
var min = nums[0]
for num in nums {
if num < min {
min = num
}
}
print(min) // 2
Second Largest Number
let nums = [8, 4, 9, 3]
var max = nums[0]
var secondMax = nums[1]
for num in nums {
if num > max {
secondMax = max
max = num
} else if num > secondMax && num != max {
secondMax = num
}
}
print(secondMax) // 8
Reverse Generic
func reverse<T>(_ value: T) {
let str = "\(value)"
var rev = ""
for s in str {
rev = "\(s)" + rev
}
print(rev)
}
reverse("harsh") // hsrah
reverse("12345") // 54321
reverse("123.45") // 54.321
Remove Duplicate Letters
var name = "cbacdcbc"
let chars = Array(name)
var lastIndex = [Character: Int]()
for (i, ch) in chars.enumerated() {
lastIndex[ch] = i
}
var stack = [Character]()
var visited = Set<Character>()
for (i, ch) in chars.enumerated() {
if visited.contains(ch) {
continue
}
while let last = stack.last, last > ch, lastIndex[last]! > i {
stack.removeLast()
visited.remove(last)
}
stack.append(ch)
visited.insert(ch)
}
print(String(stack))
Find All Numbers Disappeared in an Array
func findDisappearedNumbers(_ nums: [Int]) -> [Int] {
let res = Set(nums)
var result = [Int]()
for i in 1...nums.count {
if !res.contains(i) {
result.append(i)
}
}
return result
}
Top comments (1)
Nice collection of beginner-friendly solutions.