DEV Community

Harsh Prajapat
Harsh Prajapat

Posted on

Coding: Leet Code

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
    }
}
Enter fullscreen mode Exit fullscreen mode

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
    }
}
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode

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]
Enter fullscreen mode Exit fullscreen mode

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
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Sum of digit - Inner Loop

let nums = [3, 0, 1]
var sum = 0

for num in nums {
    sum = sum + num
}

print(sum) // 4
Enter fullscreen mode Exit fullscreen mode

Sum of digit - High Order Function

let nums = [3, 0, 1]
let actualSum = nums.reduce(0, +)
print(actualSum)
Enter fullscreen mode Exit fullscreen mode

Reverse Number

var number = 123
var reversed = 0

while number > 0 {
    let remainder = number % 10
    reversed = (reversed * 10) + remainder
    number /= 10
}

print(reversed) // 321
Enter fullscreen mode Exit fullscreen mode

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
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode

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]
Enter fullscreen mode Exit fullscreen mode

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()) 
Enter fullscreen mode Exit fullscreen mode

Strings: Reverse String

let name = "Hey! Swift"
var rev = ""

for s in name {
    rev = String(s) + rev
}

print(rev) // tfiwS !yeH
Enter fullscreen mode Exit fullscreen mode

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!
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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))
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode

Top comments (1)

Collapse
 
synfinity-dynamics-pvt-ltd profile image
Synfinity Dynamics Pvt Ltd

Nice collection of beginner-friendly solutions.