Minimize steps to reach K from 0 by adding 1 or doubling at each step
Given a positive integer K, the task is to find the minimum number of operations of the following two types, required to change 0 to K:
- Add one to the operand
- Multiply the operand by 2.
Examples:
Input: K = 1
Output: 1
Explanation:
Step 1: 0 + 1 = 1 = KInput: K = 4
Output: 3
Explanation:
Step 1: 0 + 1 = 1,
Step 2: 1 * 2 = 2,
Step 3: 2 * 2 = 4 = K
Approach:
- If K is an odd number, the last step must be adding 1 to it.
- If K is an even number, the last step is to multiply by 2 to minimise the number of steps.
- Create a dp[] table that stores in every dp[i], the minimum steps required to reach i.
Below is the implementation of the above approach:
C++
// C++ program to implement the above approach #include <bits/stdc++.h> using namespace std; // Function to find minimum operations int minOperation( int k) { // vector dp is initialised // to store the steps vector< int > dp(k + 1, 0); for ( int i = 1; i <= k; i++) { dp[i] = dp[i - 1] + 1; // For all even numbers if (i % 2 == 0) { dp[i] = min(dp[i], dp[i / 2] + 1); } } return dp[k]; } // Driver Code int main() { int K = 12; cout << minOperation(k); } |
chevron_right
filter_none
Java
// Java program to implement the above approach class GFG{ // Function to find minimum operations static int minOperation( int k) { // dp is initialised // to store the steps int dp[] = new int [k + 1 ]; for ( int i = 1 ; i <= k; i++) { dp[i] = dp[i - 1 ] + 1 ; // For all even numbers if (i % 2 == 0 ) { dp[i] = Math.min(dp[i], dp[i / 2 ] + 1 ); } } return dp[k]; } // Driver Code public static void main (String []args) { int K = 12 ; System.out.print( minOperation(K)); } } // This code is contributed by chitranayal |
chevron_right
filter_none
Python3
# Python3 program to implement the above approach # Function to find minimum operations def minOperation(k): # dp is initialised # to store the steps dp = [ 0 ] * (k + 1 ) for i in range ( 1 , k + 1 ): dp[i] = dp[i - 1 ] + 1 # For all even numbers if (i % 2 = = 0 ): dp[i] = min (dp[i], dp[i / / 2 ] + 1 ) return dp[k] # Driver Code if __name__ = = '__main__' : k = 12 print (minOperation(k)) # This code is contributed by mohit kumar 29 |
chevron_right
filter_none
C#
// C# program to implement the above approach using System; class GFG{ // Function to find minimum operations static int minOperation( int k) { // dp is initialised // to store the steps int []dp = new int [k + 1]; for ( int i = 1; i <= k; i++) { dp[i] = dp[i - 1] + 1; // For all even numbers if (i % 2 == 0) { dp[i] = Math.Min(dp[i], dp[i / 2] + 1); } } return dp[k]; } // Driver Code public static void Main() { int K = 12; Console.Write(minOperation(K)); } } // This code is contributed by Nidhi_Biet |
chevron_right
filter_none
Output:
5
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.