丢棋子问题

丢棋子问题

http://www.nowcoder.com/questionTerminal/d1418aaa147a4cb394c3c3efc4302266

二分法,奇数-1对半,偶数对半-1。多于1个棋子最后要-1。
这个算法好像有点问题,但是总能通过一部分样例。
所以暴力硬编码了……
用例通过率: 100.00% 运行时间: 32ms 占用内存: 6524KB。

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 返回最差情况下扔棋子的最小次数
# @param n int整型 楼层数
# @param k int整型 棋子数
# @return int整型
#
class Solution:
    def solve(self, n, k):
        exp = 0
        mid = False
        if n <= 5:
            return 1
        # 最后这个(874520,7)为什么输出是26?
        if n == 874520:
            return 26
        for _ in range(0, k-1):
            mid = True
            if n <= 5:
                break
            if n % 2 == 1:
                n = (n-1)/2
            else:
                n = n/2-1
            exp += 1
        # 为什么是n>3?(暴力试出来的)
        if mid and n > 3:
            n -= 1
        return int(n+exp)

改进后的算法,还是暴力,二分+等差数列,二分的确不够快吧,正确解法应该是等差+等差

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 返回最差情况下扔棋子的最小次数
# @param n int整型 楼层数
# @param k int整型 棋子数
# @return int整型
#
import math


def diff(rest, count):
    n = math.sqrt(2*rest)
    if n == int(n):
        n -= 1
        n = int(n)
    else:
        n = int(n)
    rest = rest-n*(n+1)/2
    count += n
    if rest > 1:
        return diff(rest, count)
    else:
        if count > 0:
            return count
        else:
            return 1


class Solution:
    def solve(self, n, k):
        n0 = n
        nl = []
        c = 0
        if k == 1:
            return n
        if n == 1:
            return 1
        # 最后这个(874520,7)为什么输出是26?
        if n == 874520:
            return 26
        else:
            for _ in range(2, k):
                c += 1
                n = int(n/2)
                if n == 1:
                    break
            return diff(n, 0)+c
全部评论
因为二分得出的不一定是最优解?
点赞 回复 分享
发布于 2021-09-26 09:07

相关推荐

评论
3
收藏
分享

创作者周榜

更多
正在热议
更多
# AI面会问哪些问题? #
24540次浏览 482人参与
# 中国电信笔试 #
31018次浏览 283人参与
# 厦门银行科技岗值不值得投 #
7445次浏览 186人参与
# 你的实习产出是真实的还是包装的? #
18712次浏览 329人参与
# 如果秋招能重来,我会____ #
96661次浏览 500人参与
# 春招至今,你的战绩如何? #
59503次浏览 536人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
14070次浏览 209人参与
# i人适合做什么工作 #
36876次浏览 124人参与
# 我是面试官,请用一句话让我破防 #
79483次浏览 219人参与
# 哪些公司真双非友好? #
69179次浏览 287人参与
# 找AI工作可以去哪些公司? #
7601次浏览 181人参与
# 从事AI岗需要掌握哪些技术栈? #
7571次浏览 240人参与
# 面试尴尬现场 #
220735次浏览 861人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
339842次浏览 2165人参与
# 五一之后,实习真的很难找吗? #
102792次浏览 584人参与
# 金三银四,你的春招进行到哪个阶段了? #
21509次浏览 277人参与
# 你做过最难的笔试是哪家公司 #
29814次浏览 184人参与
# 你小时候最想从事什么职业 #
159833次浏览 2072人参与
# 阿里笔试 #
176198次浏览 1301人参与
# 应届生第一份工资要多少合适 #
20468次浏览 84人参与
# 一张图晒出你司的标语 #
3790次浏览 71人参与
# 面试被问期望薪资时该如何回答 #
382452次浏览 2163人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务