#1387

Sort Integers by The Power Value

Medium
Dynamic ProgrammingMemoizationSortingHash MapArray
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal Solution
Time
O(n²)
O(n log n)
Space
O(n)
O(n)
💡

Intuition

Time O(n log n)Space O(n)

Using memoization, we can store the power values of integers that we have already computed, significantly reducing redundant calculations and improving efficiency.

⚙️

Algorithm

5 steps
  1. 1Step 1: Create a memoization dictionary to store computed power values.
  2. 2Step 2: Define a recursive function to calculate the power value, checking the memoization dictionary first.
  3. 3Step 3: Iterate through the range [lo, hi], using the recursive function to get power values.
  4. 4Step 4: Store the integers and their power values in a list.
  5. 5Step 5: Sort the list by power values and return the k-th integer.
solution.py23 lines
1# Full working Python code
2
3def power(x, memo):
4    if x in memo:
5        return memo[x]
6    steps = 0
7    original = x
8    while x != 1:
9        if x % 2 == 0:
10            x //= 2
11        else:
12            x = 3 * x + 1
13        steps += 1
14    memo[original] = steps
15    return steps
16
17def getKth(lo, hi, k):
18    memo = {}
19    power_values = []
20    for i in range(lo, hi + 1):
21        power_values.append((power(i, memo), i))
22    power_values.sort()
23    return power_values[k - 1][1]

Complexity note: The time complexity is O(n log n) due to sorting the power values, while the memoization allows us to compute the power values in O(n) time overall, making it efficient.

  • 1Memoization can drastically reduce redundant calculations, improving performance.
  • 2Sorting requires careful handling of ties in power values, which can be managed with tuple sorting.

Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.