Skip to content

Commit 21d3532

Browse files
aQuaaQua
aQua
authored and
aQua
committed
380 runtime error
1 parent 924d279 commit 21d3532

File tree

2 files changed

+20
-25
lines changed

2 files changed

+20
-25
lines changed

Algorithms/0380.insert-delete-getrandom-o1/insert-delete-getrandom-o1.go

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,56 @@
11
package Problem0380
22

33
import "math/rand"
4+
import "fmt"
45

56
// RandomizedSet 是一个随机获取的集合
67
type RandomizedSet struct {
7-
rec map[int]bool
8+
a []int
9+
idx map[int]int // idx 的 v 是 k 在 a 中的位置。
810
}
911

1012
// Constructor returns RandomizedSet
1113
/** Initialize your data structure here. */
1214
func Constructor() RandomizedSet {
1315
return RandomizedSet{
14-
rec: make(map[int]bool),
16+
a: []int{},
17+
idx: make(map[int]int),
1518
}
1619
}
1720

1821
// Insert 插入数据
1922
/** Inserts a value to the set. Returns true if the set did not already contain the specified element. */
2023
func (r *RandomizedSet) Insert(val int) bool {
21-
if _, ok := r.rec[val]; ok {
24+
if _, ok := r.idx[val]; ok {
2225
return false
2326
}
24-
r.rec[val] = true
27+
r.a = append(r.a, val)
28+
r.idx[val] = len(r.a) - 1
2529
return true
2630
}
2731

2832
// Remove 删除数据
2933
/** Removes a value from the set. Returns true if the set contained the specified element. */
3034
func (r *RandomizedSet) Remove(val int) bool {
31-
if _, ok := r.rec[val]; ok {
32-
delete(r.rec, val)
33-
return true
35+
if _, ok := r.idx[val]; !ok {
36+
return false
3437
}
3538

36-
return false
39+
// 把 a 的最后一个数,放入待删除的数的位置
40+
r.a[r.idx[val]] = r.a[len(r.a)-1]
41+
// 删除最后一个数
42+
r.a = r.a[:len(r.a)-1]
43+
// 在 r.m 中删除 val 的记录
44+
delete(r.idx, val)
45+
46+
return true
3747
}
3848

3949
// GetRandom 获取随机数据
4050
/** Get a random element from the set. */
4151
func (r *RandomizedSet) GetRandom() int {
42-
if len(r.rec) == 0 {
43-
return 0
44-
}
45-
46-
rnd := rand.Int() % len(r.rec)
47-
res := 0
48-
for k := range r.rec {
49-
if rnd == 0 {
50-
res = k
51-
break
52-
}
53-
rnd--
54-
}
55-
56-
return res
52+
fmt.Println(r.a)
53+
return r.a[rand.Intn(len(r.a))]
5754
}
5855

5956
/**

Algorithms/0380.insert-delete-getrandom-o1/insert-delete-getrandom-o1_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ func Test_Problem0380(t *testing.T) {
1111

1212
rs := Constructor()
1313

14-
ast.Equal(0, rs.GetRandom(), "从空集合中,只能取出0")
15-
1614
ast.True(rs.Insert(1), "插入1")
1715

1816
ast.False(rs.Remove(2), "删除2")

0 commit comments

Comments
 (0)