首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    第n个丑数

    习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。...【思路】 首先想到的是肯定是暴力法,从1,2,3,…循环一直找到给定的第n个丑数,但是这种做法我记得在LeetCode是TLE的。那么有没有更elegant的方法呢?...以下思路来自《剑指offer》第34题。 既然一个个循环不可行,那么就生成第n个丑数呗。 由于丑数只包含因子2,3,5,那么我们一个丑数只乘2,3,5的话也可以得到丑数。...由于1是一个丑数,那么分别乘上2,3,5可以得2,3,5。显然,它们是丑数。但是注意4也是一个丑数,它可以由2 x 2得到。...所以丑数可以再乘以2,3,5得到下一个丑数,唯一要保证的是应该从小到大得到下一个丑数。所以要分别保留2,3,5的上一个丑数指针,下一个丑数则是三个指针所指的数值分别乘以对应的因子中的最小值。

    1.3K60

    查找第k小的元素(O(n)递归解法)

    今天分享一个小技巧,虽然是小技巧但是还是很有价值的,曾经是微软的面试题。...题目是这样的,一个无序的数组让你找出第k小的元素,我当时看到这道题的时候也像很多人一样都是按普通的思维,先排序在去第K个,但是当数组非常大的时候,效率不高,那有没有简单的方法了,其实我们早就学过,只是我们不善于思考和变通...很多人刚开始非常热衷于各种排序算法只是了解却没深究,这个题目的复杂度是O(n),原理就是快速排序里面的划分算法。    ...k,说明第k小的数在左边,那就在左边进行我们的递归;否则,在右边,那么说明右边的第k-count小的数就是我们所要的,在右边进行我们的递归。...代码如下: 1 #include"stdio.h" 2 int GetMinK(int A[],int n,int k) 3 { 4 int s=-1,i=0,j=n-1,

    1.9K50

    Python快速计算Fibonacci数列中第n项的方法

    1 return fibo1(n-1) + fibo1(n-2) @lru_cache(maxsize=64) def fibo2(n): '''递归法,使用缓存修饰器加速''' if n in...range(2, n+1): a, b = b, a+b return a # 测试3个函数的执行速度 n = 40 for fibo in (fibo1, fibo2, fibo3...267914296:67.31945824623108 fibo2:267914296:0.0 fibo3:267914296:0.0 由于第一个函数运行速度非常慢,在n变大时只测试后面2个函数的执行时间...380时,第二个函数由于递归深度过大而崩溃,抛出异常: RecursionError: maximum recursion depth exceeded while calling a Python object...下面继续测试第3个函数,当n=500时,运行结果为: fibo3:139423224561697880139724382870407283950070256587697307264108962948325571622863290691557658876222521294125

    2.2K70

    Fibonacci数列第n项的第7种计算方法:Python列表

    前面已经分享了几种计算Fibonacci数列第n项的方法,详见Python快速计算Fibonacci数列中第n项的方法和三种Fibonacci数列第n项计算方法及其优劣分析,本文分享第7种(过几天分享第...8种),主要演示列表的append()和pop()这两个方法和反向索引的用法。...下面的代码使用第800万项对本文的第7种方法和前面6种中最快的方法3进行了测试和对比,事实证明,算法3是无敌的,也是最简单的。 大家不妨分析一下,本文的方法7比方法3慢的原因是什么?...(0) return data[-1] n = 8000000 for fibo in (fibo3, fibo7): start = time() r = str(fibo(n))...__name__, len(r), sep=':', end=':') print(time()-start) 运行结果: fibo3:1671901:619.382312297821

    1K40
    领券