diff --git a/contains-duplicate/radiantchoi.swift b/contains-duplicate/radiantchoi.swift new file mode 100644 index 0000000000..49eb29b32f --- /dev/null +++ b/contains-duplicate/radiantchoi.swift @@ -0,0 +1,15 @@ +class Solution { + func containsDuplicate(_ nums: [Int]) -> Bool { + var occurences = [Int: Bool]() + + for num in nums { + if let occurs = occurences[num] { + return occurs + } else { + occurences[num] = true + } + } + + return false + } +} diff --git a/house-robber/radiantchoi.swift b/house-robber/radiantchoi.swift new file mode 100644 index 0000000000..3624b564f8 --- /dev/null +++ b/house-robber/radiantchoi.swift @@ -0,0 +1,20 @@ +class Solution { + func rob(_ nums: [Int]) -> Int { + if nums.count < 3 { + return nums.max()! + } + + var expected = [Int]() + expected.append(nums[0]) + expected.append(max(nums[0], nums[1])) + + for i in 2.. [Int] { + var occurences = [Int: Int]() + + for num in nums { + if let occurence = occurences[num] { + occurences[num] = occurence + 1 + } else { + occurences[num] = 1 + } + } + + let numbers = occurences.keys.sorted { occurences[$0] ?? 0 > occurences[$1] ?? 0 } + + return Array(numbers[0.. [Int] { + let nums = nums.enumerated().sorted { $0.1 < $1.1 } + + for (index, num) in nums { + let newTarget = target - num + + var left = 0 + var right = nums.count - 1 + + while left <= right { + let mid = (left + right) / 2 + + if nums[mid].1 == newTarget && nums[mid].0 != index { + return [index, nums[mid].0] + } else if nums[mid].1 < newTarget { + left = mid + 1 + } else { + right = mid - 1 + } + } + } + + return [0, 1] + } +}