leetcode[Arranging Coins]
来源:互联网 发布:access vba编程入门 编辑:程序博客网 时间:2024/06/15 02:46
解法一:
public class Solution { public int arrangeCoins(int n) { //利用求和公式1+2+3+...+k=k*(k+1)/2, //令k*(k+1)/2 = n,利用一元二次方程的求根公式,因为k大于0,解得:k=(sqrt(8*n+1)-1)/2,取地板 //但是有一个问题,当n很大时,8*n会溢出,8.0*n就变成double了,不会溢出 double temp = Math.floor((Math.sqrt(8.0*n + 1) - 1) / 2); return (int)temp; }}
解法一另一种处理方式:
public class Solution { public int arrangeCoins(int n) { //利用求和公式1+2+3+...+k=k*(k+1)/2, //令k*(k+1)/2 = n,利用一元二次方程的求根公式,因为k大于0,解得:k=(sqrt(8*n+1)-1)/2,取地板 //但是有一个问题,当n很大时,8*n会溢出,将n转换为long也不会溢出 double temp = Math.floor((Math.sqrt(8.0 * (long)n + 1) - 1) / 2); return (int)temp; }}
解法二:
public class Solution {//利用求和公式1+2+3+...+k=k*(k+1)/2,//因为k*(k+1)/2 <= n,所以可以利用二分检索通过判断找出满足条件的kpublic int arrangeCoins(int n) {int start = 0;int end = n;int mid = 0;while (start <= end){//二分检索的套路mid = (start + end) >>> 1;//相当于(start + end) / 2//这里通过0.5*mid,转化为double了,所以不会有溢出的问题产生if ((0.5 * mid * mid + 0.5 * mid ) <= n){start = mid + 1;}else{end = mid - 1;}}return start - 1;}}
阅读全文
0 0
- LeetCode 441. Arranging Coins
- LeetCode Arranging Coins
- LeetCode 441. Arranging Coins
- [leetcode 441]Arranging Coins
- leetcode 441. Arranging Coins
- Leetcode: 441. Arranging Coins
- LeetCode 441. Arranging Coins
- Leetcode 441 Arranging Coins
- Leetcode Arranging Coins
- 【LeetCode】 441. Arranging Coins
- LeetCode 441. Arranging Coins
- [leetcode]441. Arranging Coins
- LeetCode 441 Arranging Coins
- LeetCode 441. Arranging Coins
- Leetcode 441. Arranging Coins
- leetcode-441. Arranging Coins
- [LeetCode]441. Arranging Coins
- LeetCode -- Arranging Coins
- ajax传多个实体参数到后端controller
- Eva's Balance
- win10中微软账户中文名称修改后本地用户文件夹仍为中文名
- java poi 解析excel 输出json 并且拼接字符串显示到jsp
- Realm源码分析之初始化
- leetcode[Arranging Coins]
- [bzoj2946][后缀数组][Poi2000]公共串
- mongoDB的使用
- 【剑指offer】面试题26:树的子结构
- 将form表单封装成对象
- platform_set_drvdata 和 platform_get_drvdata
- 三级联动
- HDU
- 数据仓库在数据挖掘的数据模型