441. Arranging Coins

来源:互联网 发布:js左右拖动滑块插件 编辑:程序博客网 时间:2024/06/05 04:36

You have a total of n coins that you want to form in a staircase shape, where every k-th row must have exactly k coins.

Given n, find the total number of full staircase rows that can be formed.

n is a non-negative integer and fits within the range of a 32-bit signed integer.
Example 1:

n = 5The coins can form the following rows:¤¤ ¤¤ ¤Because the 3rd row is incomplete, we return 2.

Example 2:

n = 8The coins can form the following rows:¤¤ ¤¤ ¤ ¤¤ ¤Because the 4th row is incomplete, we return 3.

最直观的解法:

class Solution {public:    int arrangeCoins(int n) {        int cnt = 0;        long long sum = 0;        for(int i = 1; ; ++i){            sum += i;            if(sum <= n)                ++cnt;            else break;        }        return cnt;    }};

求根公式根据(l+1)*l <= n

int arrangeCoins(int n){     return sqrt(2 * (long)n + 1 / 4.0) - 1 / 2.0;}

二分法

int arrangeCoins(int n){    if(n <= 1) return n;    long left = 0, right = n;    while(left <= right){        long mid = left + (right - left)/2;        long sum = ((1 + mid) * mid)/2;        if(sum <= n){            left = mid + 1;        }else {            right = mid - 1;        }    }    return left - 1;}
0 0
原创粉丝点击