File tree Expand file tree Collapse file tree 2 files changed +91
-0
lines changed
lcof2/剑指 Offer II 030. 插入、删除和随机访问都是 O(1) 的容器 Expand file tree Collapse file tree 2 files changed +91
-0
lines changed Original file line number Diff line number Diff line change @@ -217,6 +217,54 @@ public:
217
217
* /
218
218
```
219
219
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
+
220
268
<!-- tabs:end -->
221
269
222
270
<!-- solution:end -->
Original file line number Diff line number Diff line change
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
+ */
You can’t perform that action at this time.
0 commit comments