題目
題目大意
解題思路
Big O
來源
解答
https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0981.Time-Based-Key-Value-Store/main.go
package timebasedkeyvaluestore
import "sort"
// 時間複雜 O(), 空間複雜 O()
type element struct {
key string
value string
timestamp int
}
type TimeMap struct {
elements map[string][]element
}
func Constructor() TimeMap {
return TimeMap{elements: make(map[string][]element)}
}
func (this *TimeMap) Set(key string, value string, timestamp int) {
this.elements[key] = append(this.elements[key], element{
key: key,
value: value,
timestamp: timestamp,
})
}
// O(log n)
func (this *TimeMap) Get(key string, timestamp int) string {
if _, ok := this.elements[key]; !ok {
return ""
}
// 二分法找出符合條件的最左邊
index := sort.Search(len(this.elements[key]), func(i int) bool {
return this.elements[key][i].timestamp > timestamp
})
if index == 0 {
return ""
}
index--
return this.elements[key][index].value
}
Benchmark