Skip to content

Commit 3fb558a

Browse files
authored
Merge pull request #1991 from radiantchoi/main
[radiantchoi] WEEK 01 solutions
2 parents 6b69bb9 + 3ef7f17 commit 3fb558a

File tree

4 files changed

+78
-0
lines changed

4 files changed

+78
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
func containsDuplicate(_ nums: [Int]) -> Bool {
3+
var occurences = [Int: Bool]()
4+
5+
for num in nums {
6+
if let occurs = occurences[num] {
7+
return occurs
8+
} else {
9+
occurences[num] = true
10+
}
11+
}
12+
13+
return false
14+
}
15+
}

house-robber/radiantchoi.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
func rob(_ nums: [Int]) -> Int {
3+
if nums.count < 3 {
4+
return nums.max()!
5+
}
6+
7+
var expected = [Int]()
8+
expected.append(nums[0])
9+
expected.append(max(nums[0], nums[1]))
10+
11+
for i in 2..<nums.count {
12+
let prev = expected[i - 1]
13+
let prevPrev = expected[i - 2]
14+
15+
expected.append(max(prev, prevPrev + nums[i]))
16+
}
17+
18+
return expected.removeLast()
19+
}
20+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
func topKFrequent(_ nums: [Int], _ k: Int) -> [Int] {
3+
var occurences = [Int: Int]()
4+
5+
for num in nums {
6+
if let occurence = occurences[num] {
7+
occurences[num] = occurence + 1
8+
} else {
9+
occurences[num] = 1
10+
}
11+
}
12+
13+
let numbers = occurences.keys.sorted { occurences[$0] ?? 0 > occurences[$1] ?? 0 }
14+
15+
return Array(numbers[0..<k])
16+
}
17+
}

two-sum/radiantchoi.swift

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution {
2+
func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
3+
let nums = nums.enumerated().sorted { $0.1 < $1.1 }
4+
5+
for (index, num) in nums {
6+
let newTarget = target - num
7+
8+
var left = 0
9+
var right = nums.count - 1
10+
11+
while left <= right {
12+
let mid = (left + right) / 2
13+
14+
if nums[mid].1 == newTarget && nums[mid].0 != index {
15+
return [index, nums[mid].0]
16+
} else if nums[mid].1 < newTarget {
17+
left = mid + 1
18+
} else {
19+
right = mid - 1
20+
}
21+
}
22+
}
23+
24+
return [0, 1]
25+
}
26+
}

0 commit comments

Comments
 (0)