Contents

ARST打卡第127周[127/521]

Algorithm

lc_441_排列硬币

思路

直接找规律 1个硬币 1行 1 + 2个硬币 2行 1 + 2 + 3 + (小于4个)个硬币 3行

所以是n个硬币,可以构造k行 令 sum = (1 + k) * k / 2 sum <= n < sum + k

方法一:可以先本地跑程序打表,然后用n去套,直接lower_bound

方法二:当然也可以直接二分

方法三:官方解中还有直接解方程的

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Solution {
public:
    int arrangeCoins(int n) {
        int left = 1, right = n;
        while (left < right) {
            int mid = (right - left + 1) / 2 + left;
            if ((long long) mid * (mid + 1) <= (long long) 2 * n) {
                left = mid;
            } else {
                right = mid - 1;
            }
        }
        return left;
    }
};
1
2
3
4
5
6
class Solution {
public:
    int arrangeCoins(int n) {
        return (int) ((sqrt((long long) 8 * n + 1) - 1) / 2);
    }
};

Review

ioctl中的协商验证

Tips

shell不能识别alias 解决方案

但是有些命名还是不行,比如s3cmd –no-check-certifacate,暂时没有找到根本原因

Share

删除小于指定大小的文件

s3cmd常用命令和使用技巧