5
5
6
6
7
7
class Solution (object ):
8
- lookup = {}
8
+ dp = {}
9
9
10
10
def getKth (self , lo , hi , k ):
11
11
"""
@@ -39,16 +39,19 @@ def partition_around_pivot(left, right, pivot_idx, nums, compare):
39
39
40
40
def power_value (x ):
41
41
y = x
42
- if x not in Solution .lookup :
42
+ if x not in Solution .dp :
43
43
result = 0
44
44
while x > 1 :
45
45
result += 1
46
46
if x % 2 :
47
47
x = 3 * x + 1
48
48
else :
49
49
x //= 2
50
- Solution .lookup [y ] = result
51
- return Solution .lookup [y ], y
50
+ if x in Solution .dp :
51
+ result += Solution .dp [x ]
52
+ break
53
+ Solution .dp [y ] = result
54
+ return Solution .dp [y ], y
52
55
53
56
arr = map (power_value , range (lo , hi + 1 ))
54
57
nth_element (arr , k - 1 )
@@ -58,7 +61,7 @@ def power_value(x):
58
61
# Time: O(nlogn)
59
62
# Space: O(n)
60
63
class Solution2 (object ):
61
- lookup = {}
64
+ dp = {}
62
65
63
66
def getKth (self , lo , hi , k ):
64
67
"""
@@ -69,15 +72,18 @@ def getKth(self, lo, hi, k):
69
72
"""
70
73
def power_value (x ):
71
74
y = x
72
- if x not in Solution2 .lookup :
75
+ if x not in Solution2 .dp :
73
76
result = 0
74
77
while x > 1 :
75
78
result += 1
76
79
if x % 2 :
77
80
x = 3 * x + 1
78
81
else :
79
82
x //= 2
80
- Solution2 .lookup [y ] = result
81
- return Solution2 .lookup [y ], y
83
+ if x in Solution2 .dp :
84
+ result += Solution2 .dp [x ]
85
+ break
86
+ Solution2 .dp [y ] = result
87
+ return Solution2 .dp [y ], y
82
88
83
89
return sorted (range (lo , hi + 1 ), key = power_value )[k - 1 ]
0 commit comments