题目:

你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。

给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。

示例 1:

输入:n = 5

输出:2

解释:因为第三行不完整,所以返回 2 。

示例 2:

输入:n = 8

输出:3

解释:因为第四行不完整,所以返回 3 。

提示:

  • 1 <= n <= 2^31 - 1

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/arranging-coins
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

【二分查找】

1.初始化left = 1, right = n,计算出mid = left + (right - left + 1) / 2,等差数列的前n项和公式:sum =  n * (n + 1) / 2(首项和公差都为1),计算出包括mid项以及之前的和;

2.循环条件:left < right:

  • sum <= n 时,说明mid以及mid以后的数可能为答案,即缩小搜索区间为:[mid, right](注意这里区间的死循环哦!故mid才向上取整);
  • sum > n 时,说明mid之前的数才可能为答案,即缩小搜索区间为:[left, mid-1];

3.循环结束的条件: left == right,区间缩小为一个点,故返回left 或者right都可以。

java代码:

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

python3代码:

 1 class Solution:
2 def arrangeCoins(self, n: int) -> int:
3 left, right = 1, n
4 while left <= right:
5 mid = left + (right - left) // 2
6 sum = mid * (mid + 1) // 2
7 if sum < n:
8 left = mid + 1
9 elif sum > n:
10 right = mid - 1
11 else:
12 return mid
13 # 循环结束,left比right大1,找小的那个
14 return right

 【数学方法】:

等差数列的前n项和公式:sum =  x * (x + 1) / 2(首项和公差都为1),这里需要求 x * (x + 1) / 2 < = n,求得x的最大值,解一元二次不等式:得到关于x的不等式为:

 java代码为:

1 class Solution {
2 public int arrangeCoins(int n) {
3 return (int)((Math.sqrt(1 + (long)8 * n) - 1) / 2);
4 }
5 }

力扣441(java&python)-排列硬币(简单)的更多相关文章

  1. 力扣题解-LCP 06. 拿硬币

    题目描述 桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中.我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数. 示例 1: 输入:[4,2,1] 输出:4 解释: ...

  2. 力扣567.字符串的排列—C语言实现

    题目 来源:力扣(LeetCode)

  3. 441 Arranging Coins 排列硬币

    你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币.给定一个数字 n,找出可形成完整阶梯行的总行数.n 是一个非负整数,并且在32位有符号整型的范围内.示例 1:n ...

  4. [LeetCode] 441. Arranging Coins 排列硬币

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

  5. 力扣——Next Permutation(下一个排列) python实现

    题目描述: 中文: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许 ...

  6. Java实现 LeetCode 441 排列硬币

    441. 排列硬币 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形成完整阶梯行的总行数. n 是一个非负整数,并且在32位有符号整 ...

  7. Leetcode之二分法专题-441. 排列硬币(Arranging Coins)

    Leetcode之二分法专题-441. 排列硬币(Arranging Coins) 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形 ...

  8. LeetCode(力扣)——Search in Rotated Sorted Array2 搜索旋转排序数组 python实现

    题目描述: python实现 Search in Rotated Sorted Array2 搜索旋转排序数组   中文: 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0 ...

  9. LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现

    题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组   中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ...

  10. 力扣—Reorder List(重排链表)python实现

    题目描述: 中文: 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点 ...

随机推荐

  1. 音标 重音 u 用 中文 吁 去记忆 骑马让马停下来的 吁 - 英语

    音标 重音 u 用 中文 吁 去记忆 骑马让马停下来的 吁

  2. java -jar xxx.jar命令执行jar包时出现Error: Invalid or corrupt jarfile xxx.jar解决方案

    MANIFEST.MF清单文件内容: Manifest-Version: 1.0 Ant-Version: Apache Ant 1.8.2 Created-By: 1.8.0_60-b27 (Ora ...

  3. eclipse错误之Errors occurred during the build. Errors running builder 'JavaScript Validator' on project

    把JavaScript Validator去掉.去掉的方法是:选择一个项目--右键Properties--Builders(排第二)--点一下右侧会有四项--取消第一项"JavaScript ...

  4. [C++]使用auto遍历判断是否是最后一个元素

    一.背景 略 二.代码 for(auto& it:vec){ if(&it==&vec.back()){ cout<<"is the last eleme ...

  5. 《世嘉新人培训教材—游戏开发》2DGraphics1项目cmake构建

    <世嘉新人培训教材-游戏开发>作为经典的游戏开发教程,提供了相关样例代码供我们进行开发使用.但是该样例是基于VS进行编写构建的,而本人日常喜欢CLion进行C/C++开发,于是准备使用cm ...

  6. PyQt5 GUI编程

    一.PyQt5简介 PyQt5是一个用于创建图形用户界面(GUI)应用程序的跨平台工具集,它将Qt库(广泛用于C++编程语言中创建丰富的GUI应用程序)的功能包装给Python使用者.PyQt5是由R ...

  7. 记录--TS类型写不好?一起来训练提升吧!

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前期准备 本篇文章的编写目的是为了提升TS类型的书写质量,高质量的类型可以提高项目的可维护性并避免一些潜在的漏洞; 在学习本篇之前需要有一 ...

  8. 记录--JS-SDK页面打开提示realAuthUrl错误

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 测试环境好好地功能,上了生产,莫名其妙报错,开始以为是没有设置Js安全接口域名,结果让相应人员一查,已经设置了相应的域名,再看下公众号内的 ...

  9. 浅谈 KingbaseES 和 SQLServer 中的 instead of 触发器

    本文基于Kingbase和SqlServer的INSTEAD OF 触发器主要功能特点进行对比浅析,同时针对SqlServer 的INSTEAD OF 触发器提出了多种kingbase环境的等价代码方 ...

  10. Python 潮流周刊第 44 期(摘要)+ 赠书 5 本《明解Python算法与数据结构》

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...