自用笔记36——时间复杂度

设计一个算法,算出 n 阶乘有多少个尾随零。

示例 1:

输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:

输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。

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

int trailingZeroes(int n){
    int i=0;
    while(n)
    {
        n=n/5;
        i=i+n;
    }
    return i;
}

处理这道题一开始当猪了,一开始想到了尾数0的产生是2和5相乘,然后一开始设计了一个程序判断乘数中2和5的个数。后来一想乘数中2的个数远远多于5,只要判断因数5的个数就行了。然后我又设计了一个程序判断每一个乘数中因数5的个数,然后我反复失败和超时。最后才发现直接统计n!中5的倍数个数,但是会发现有25会多出一个5,有125会多出两个5.。。所以分别统计5、25、125。。。的倍数个数即可,即i=n/5+n/25+n/125+。。。
也就是循环语句n=n/5; i=i+n;

时间复杂度:
O(1):常数复杂度无论输入有多大,程序运行都需要相同的时间

O(n2):二次复杂度处理时间随着输入大小的增加而越来越快-作为一个多项式函数
1项:1秒
10项:100秒
100项:10000秒

O(n):线性复杂度程序运行时间随输入大小成比例增加
1项:1秒
10项:10秒
100项:100秒

O(logn):对数复杂度程序运行时间增长缓慢,即使输入的大小增长很大
1项:1秒
10项:2秒
100项:3秒
1000项:4秒
10000件:5秒

https://blog.csdn.net/ffsiwei/article/details/80424275
概念性东西码一下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值