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