leetcode887 鸡蛋掉落
你將獲得?K?個(gè)雞蛋,并可以使用一棟從?1?到?N??共有 N?層樓的建筑。
每個(gè)蛋的功能都是一樣的,如果一個(gè)蛋碎了,你就不能再把它掉下去。
你知道存在樓層?F ,滿足?0 <= F <= N 任何從高于 F?的樓層落下的雞蛋都會(huì)碎,從?F?樓層或比它低的樓層落下的雞蛋都不會(huì)破。
每次移動(dòng),你可以取一個(gè)雞蛋(如果你有完整的雞蛋)并把它從任一樓層?X?扔下(滿足?1 <= X <= N)。
你的目標(biāo)是確切地知道 F 的值是多少。
無論 F 的初始值如何,你確定 F 的值的最小移動(dòng)次數(shù)是多少?
?
示例 1:
輸入:K = 1, N = 2
輸出:2
解釋:
雞蛋從 1 樓掉落。如果它碎了,我們肯定知道 F = 0 。
否則,雞蛋從 2 樓掉落。如果它碎了,我們肯定知道 F = 1 。
如果它沒碎,那么我們肯定知道 F = 2 。
因此,在最壞的情況下我們需要移動(dòng) 2 次以確定 F 是多少。
示例 2:
輸入:K = 2, N = 6
輸出:3
示例 3:
輸入:K = 3, N = 14
輸出:4
?
提示:
1 <= K <= 100
1 <= N <= 10000
思路:看我這個(gè)網(wǎng)址https://blog.csdn.net/hebtu666/article/details/84789853
class Solution {public int superEggDrop(int kChess,int nLevel) {int bsTimes = log2N(nLevel) + 1;if (kChess >= bsTimes) {return bsTimes;}int[] dp = new int[kChess];int res = 0;while (true) {res++;//壓縮空間記得記錄次數(shù)int previous = 0;for (int i = 0; i < dp.length; i++) {int tmp = dp[i];dp[i] = dp[i] + previous + 1;previous = tmp;if (dp[i] >= nLevel) {return res;}}}}public static int log2N(int n) {int res = -1;while (n != 0) {res++;n >>>= 1;}return res;} }?
總結(jié)
以上是生活随笔為你收集整理的leetcode887 鸡蛋掉落的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 排序算法基本介绍及python实现(含详
- 下一篇: leecode5 最长回文子串