There is only one character 'A' on the screen of a notepad. You can perform one of two operations on this notepad for each step:
- Copy All: You can copy all the characters present on the screen (a partial copy is not allowed).
- Paste: You can paste the characters which are copied last time.
Given an integer n, return the minimum number of operations to get the character 'A' exactly n times on the screen.
Example 1:
Input: n = 3 Output: 3 Explanation: Initially, we have one character 'A'. In step 1, we use Copy All operation. In step 2, we use Paste operation to get 'AA'. In step 3, we use Paste operation to get 'AAA'.
Example 2:
Input: n = 1 Output: 0
Constraints:
1 <= n <= 1000
Approach 01:
-
C++
-
Python
#include <numeric>
#include <vector>
class Solution {
public:
int minSteps(int totalA) {
if (totalA <= 1)
return 0;
// steps[i]: the minimum steps to get i 'A's
std::vector<int> minStepsForA(totalA + 1);
// Copy 'A', then paste 'A' i - 1 times.
std::iota(minStepsForA.begin(), minStepsForA.end(), 0);
for (int currentA = 2; currentA <= totalA; ++currentA) {
for (int divisor = currentA / 2; divisor > 2; --divisor) {
if (currentA % divisor == 0) {
minStepsForA[currentA] = minStepsForA[divisor] + currentA / divisor; // Paste minStepsForA[divisor] currentA / divisor times.
break;
}
}
}
return minStepsForA[totalA];
}
};
class Solution:
def kthSmallest(self, array, k):
# Find the maximum value in the array
maxValue = 0
for num in array:
if num > maxValue:
maxValue = num
# Create a boolean array to track the presence of each value
presence = [0] * maxValue
# Mark the presence of each value in the boolean array
for num in array:
presence[num - 1] = 1
# Find the k-th smallest element by counting marked values
count = 0
kthSmallestElement = 0
for i in range(maxValue):
if presence[i] == 1:
count += 1
kthSmallestElement = i + 1
if count == k:
break
return kthSmallestElement
Time Complexity
- Initialization with
iota:The function
std::iotainitializes theminStepsForAvector with sequential values, which takes \( O(n) \) time, where \( n \) istotalA. - Outer Loop:
The outer loop runs for every value of
currentAfrom 2 tototalA, contributing \( O(n) \) to the time complexity. - Inner Loop:
The inner loop, which checks for divisors of
currentA, iterates approximately \( O(\sqrt{n}) \) times for eachcurrentA, where \( n \) istotalA. - Overall Time Complexity:
The overall time complexity is \( O(n \sqrt{n}) \), where \( n \) is
totalA.
Space Complexity
- Space for
minStepsForAVector:The
minStepsForAvector requires \( O(n) \) space to store the minimum steps for each value oftotalA. - Overall Space Complexity:
The overall space complexity is \( O(n) \), where \( n \) is
totalA.