793. 阶乘函数后K个零 golang

Me(AC 33 / 44 个通过测试用例)

func preimageSizeFZF(K int) int {
    count := 0
    for i := 0; i < 1000000; i++ {
        if trailingZeroes(i) == K {
            count++
        }
    }
 
    fmt.Println(count)
    //fmt.Println(trailingZeroes(25))
    return count
    
}

func trailingZeroes(n int) int {
    if n == 0 {
        return 0
    }
    return trailingZeroes(n / 5) + n / 5
}

强行通过后

这个题答案是使用二分查找减少时间。1136ms已经是非常少见的,而且击败了100%的用户。

执行用时 :1136 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗 :1.9 MB, 在所有 Go 提交中击败了50.00%的用户

使用并发大法(本地通过)

var count int = 0

func preimageSizeFZF(K int) int {
	wg := sync.WaitGroup{}
	wg.Add(1000000)
	for i := 0; i < 1000000; i++ {
		go func(i int) {
			trailingZeroes(i, K)
			wg.Done()
		}(i)
	}

	return count
}

func trailingZeroes(i int, K int) {
	if trailingZeroes1(i) == K {
		count++
	}
}

func trailingZeroes1(n int) int {
	if n == 0 {
		return 0
	}
	return trailingZeroes1(n / 5) + n / 5
}

执行结果: 超出内存限制

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值