Skip to content

Commit 532bfa2

Browse files
authored
feat: add swift implementation to lcof2 problem: No.030 (#3035)
1 parent ecef1ba commit 532bfa2

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

lcof2/剑指 Offer II 030. 插入、删除和随机访问都是 O(1) 的容器/README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,54 @@ public:
217217
*/
218218
```
219219
220+
#### Swift
221+
222+
```swift
223+
class RandomizedSet {
224+
private var m: [Int: Int]
225+
private var a: [Int]
226+
227+
init() {
228+
self.m = [Int: Int]()
229+
self.a = [Int]()
230+
}
231+
232+
func insert(_ val: Int) -> Bool {
233+
if m[val] != nil {
234+
return false
235+
}
236+
m[val] = a.count
237+
a.append(val)
238+
return true
239+
}
240+
241+
func remove(_ val: Int) -> Bool {
242+
if let idx = m[val] {
243+
let last = a.count - 1
244+
if idx != last {
245+
a.swapAt(idx, last)
246+
m[a[idx]] = idx
247+
}
248+
a.removeLast()
249+
m.removeValue(forKey: val)
250+
return true
251+
}
252+
return false
253+
}
254+
255+
func getRandom() -> Int {
256+
return a[Int.random(in: 0..<a.count)]
257+
}
258+
}
259+
260+
/* let obj = RandomizedSet()
261+
* let param_1 = obj.insert(val)
262+
* let param_2 = obj.insert(val)
263+
* let param_3 = obj.remove(val)
264+
* let param_4 = obj.getRandom()
265+
*/
266+
```
267+
220268
<!-- tabs:end -->
221269

222270
<!-- solution:end -->
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class RandomizedSet {
2+
private var m: [Int: Int]
3+
private var a: [Int]
4+
5+
init() {
6+
self.m = [Int: Int]()
7+
self.a = [Int]()
8+
}
9+
10+
func insert(_ val: Int) -> Bool {
11+
if m[val] != nil {
12+
return false
13+
}
14+
m[val] = a.count
15+
a.append(val)
16+
return true
17+
}
18+
19+
func remove(_ val: Int) -> Bool {
20+
if let idx = m[val] {
21+
let last = a.count - 1
22+
if idx != last {
23+
a.swapAt(idx, last)
24+
m[a[idx]] = idx
25+
}
26+
a.removeLast()
27+
m.removeValue(forKey: val)
28+
return true
29+
}
30+
return false
31+
}
32+
33+
func getRandom() -> Int {
34+
return a[Int.random(in: 0..<a.count)]
35+
}
36+
}
37+
38+
/* let obj = RandomizedSet()
39+
* let param_1 = obj.insert(val)
40+
* let param_2 = obj.insert(val)
41+
* let param_3 = obj.remove(val)
42+
* let param_4 = obj.getRandom()
43+
*/

0 commit comments

Comments
 (0)