Skip to content

Commit 12b05e3

Browse files
committed
add two more
1 parent d972d3a commit 12b05e3

4 files changed

+95
-0
lines changed

src/search_in_rotated_sorted_array.py

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
def search(self, nums: List[int], target: int) -> int:
6+
left, right = 0, len(nums) - 1
7+
8+
while left <= right:
9+
middle = (left + right) // 2
10+
11+
if target == nums[middle]:
12+
return middle
13+
14+
# left sorted portion
15+
if nums[left] <= nums[middle]:
16+
if target < nums[left] or target > nums[middle]:
17+
left = middle + 1
18+
else:
19+
right = middle - 1
20+
# right sorted portion
21+
else:
22+
if target > nums[right] or target < nums[middle]:
23+
right = middle - 1
24+
else:
25+
left = middle + 1
26+
27+
return -1

src/time_based_kv_store.py

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from typing import List, Dict
2+
3+
4+
class TimeMap:
5+
def __init__(self):
6+
self.db: Dict[str, List[str, int]] = {}
7+
8+
def set(self, key: str, value: str, timestamp: int) -> None:
9+
if key not in self.db:
10+
self.db[key] = []
11+
self.db[key].append([value, timestamp])
12+
13+
def get(self, key: str, timestamp: int) -> str:
14+
res = ""
15+
values: List[str, int] = self.db.get(key, [])
16+
17+
left, right = 0, len(values) - 1
18+
while left <= right:
19+
middle = (left + right) // 2
20+
21+
if values[middle][1] <= timestamp:
22+
res = values[middle][0]
23+
left = middle + 1
24+
else:
25+
right = middle - 1
26+
return res
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from search_in_rotated_sorted_array import Solution
2+
3+
4+
testcase = [{"testcase": [4, 5, 6, 7, 0, 1, 2], "target": 0, "result": 4}]
5+
6+
7+
def test_search_in_rotated_sorted_array():
8+
for tc in testcase:
9+
nums = tc["testcase"]
10+
target = tc["target"]
11+
ans = Solution().search(nums, target)
12+
assert ans == tc["result"]

tests/test_time_based_kv_store.py

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from time_based_kv_store import TimeMap
2+
3+
testcase = [
4+
{
5+
"op": ["set", "get", "get", "set", "get", "get"],
6+
"value": [
7+
["foo", "bar", 1],
8+
["foo", 1],
9+
["foo", 3],
10+
["foo", "bar2", 4],
11+
["foo", 4],
12+
["foo", 5],
13+
],
14+
"result": ["", "bar", "bar", "", "bar2", "bar2"],
15+
}
16+
]
17+
18+
19+
def test_time_based_kv_store():
20+
tm = TimeMap()
21+
for tc in testcase:
22+
op_times = len(tc["op"])
23+
res = []
24+
for index in range(op_times):
25+
if tc["op"][index] == "set":
26+
tm.set(tc["value"][index][0], tc["value"][index][1], tc["value"][index][2])
27+
res.append("")
28+
else:
29+
res.append(tm.get(tc["value"][index][0], tc["value"][index][1]))
30+
assert res == tc["result"]

0 commit comments

Comments
 (0)