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常用命令和使用技巧