You have a total of n coins and you want to arrange the coins in staircase shape, where every i-th row must have exactly i coins. You want to find the total number of full staircase rows that can be formed.
Example:
Input : n = 7 Output : 3 We can form the staircase as follows : C C C C C C C Here only 3 rows are complete
Naive Approch:
This problem can be solved by linear scan.
We can traverse the all the number from 1 while n*(n+1)/2 is less or equal to n where n = 1, 2, 3, …n.
Time complexity of this approach is O(n).
Efficient Approch:
We can solve this problem using binary search.
C++
#include <bits/stdc++.h>
using namespace std;
int findRows(int n)
{
int l = 0, r = n, mid, k ;
//finding middle element
while (l <= r)
{
mid = l+(r-l)/2;
//check condition for mid if true
//go to the right part else left part
if(n >= (mid*(mid+1))/2 )
{
k = mid;
l = mid + 1;
}
else
r=mid - 1;
}
return k;
}
// Driver Code
int main()
{
int n = 7;
//calling function
int k = findRows(n) ;
cout << k ;
return 0;
}
Python
# Write Python3 code here def findRows(n): l, r = 0, n k = 0 while( l<= r) : #finding middle element mid = l+(r-l)//2 #check condition for mid if true go to the right part else left part if (n >= (mid*(mid+1))//2) : l = mid + 1 k = mid else : r = mid - 1 return k n = 7 #calling function k = findRows(n) print(k)
Output:
3
Time Complexity : O(log n)
Space Complexity : O(1)
