Cool说丨力扣374、441

简介: 441. 排列硬币374. 猜数字大小

374. 猜数字大小

我们正在玩一个猜数字游戏。 游戏规则如下:我从 1n 选择一个数字。 你需要猜我选择了哪个数字。每次你猜错了,我会告诉你这个数字是大了还是小了。你调用一个预先定义好的接口 guess(int num),它会返回 3 个可能的结果(-110):

-1 : 我的数字比较小

1 : 我的数字比较大

0 : 恭喜!你猜对了!

示例 :

输入: n = 10, pick = 6

输出: 6

二分法

intguess(intnum);

classSolution {

public:

   intguessNumber(intn) {

   intlow=1,mid=low+(n-low)/2;

   while(low<=n)

   {

       if(guess(mid)==0) returnmid;

       elseif(guess(mid)==1){

           low=mid+1;

       }

       else

       {

           n=mid-1;

       }

       mid=low+(n-low)/2;

   }

       returnlow;

       

   }

};

执行用时 :4 ms, 在所有 C++ 提交中击败了70.91%的用户

内存消耗 :8.3 MB, 在所有 C++ 提交中击败了5.38%的用户

441. 排列硬币

你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币。

给定一个数字 n,找出可形成完整阶梯行的总行数。

n 是一个非负整数,并且在32位有符号整型的范围内。

示例 1:

n = 5

硬币可排列成以下几行:¤¤ ¤¤ ¤

因为第三行不完整,所以返回2.示例 2:

n = 8

硬币可排列成以下几行:¤¤ ¤¤ ¤ ¤¤ ¤

因为第四行不完整,所以返回3.

第一种,挨个递减

   intarrangeCoins(intn) {

   if (n==0) return0;

   inti=1;

   while (n>0)

   {

       n-=i;

       i+=1;

   }

   if (n<0) returni-2; //这里需要注意,n是否为当前行最后一个

   else

       returni-1;

   }

执行用时 :12 ms, 在所有 C++ 提交中击败了62.52%的用户

内存消耗 :8.2 MB, 在所有 C++ 提交中击败了75.18%的用户

比如 10 = 1+2+3+4 ,刚好可以到第四行,所以返回i-1,而对于11=1+2+3+4+1,此时也应该返回4,而此时i=6;所以返回i-2

0   0

1   1

2   1

3   2

4   2

5   2

6   3

7   3

8   3

9   3

10   4

11   4

12   4

13   4

14   4

15   5

16   5

17   5

18   5

19   5

20   5

第二种,列数学公式

1+2+3+4+。。+k=k(k+1)/2

所以 k(k+1)/2<=n;

k^2 + k <= n × 2;配方 4k^2 + 4k + 1 <= 8n + 1;2k + 1 <= sqrt(8n + 1);k<=(sqrt(8n+1)-1)/2;

intarrangeCoins(intn) {

      return (sqrt(n*8.0+1) -1) /2;

   }

执行用时 :8 ms, 在所有 C++ 提交中击败了80.98%的用户

内存消耗 :8.3 MB, 在所有 C++ 提交中击败了73.70%的用户


目录
相关文章
|
人工智能 C# C++
Cool说丨力扣153、454
153. 寻找旋转排序数组中的最小值 454. 四数相加 II
99 1
|
C# C++
Cool说丨力扣287/792/378
关注博主,获取更多知识
81 0
|
C# C++ 索引
Cool说丨力扣162
162. 寻找峰值
58 0
|
存储 C# C++
Cool说丨力扣29/34
关注博主。获取更多知识
73 0
|
存储 C# C++
Cool说丨力扣392
392. 判断子序列
47 0
|
C# C++
Cool说丨力扣744、704
744. 寻找比目标字母大的最小字母 704. 二分查找
67 0
|
C#
Cool说丨力扣475
475. 供暖器
83 0
|
机器学习/深度学习 算法 C#
Cool说丨力扣202
202. 快乐数
76 0
|
C#
Cool说丨力扣167
167. 两数之和 II - 输入有序数组
44 0
|
C# C++
Cool说丨力扣367
367. 有效的完全平方数
106 0