1、用递归求 Fibonacci,要求速度不低于迭代;
2、排序的整型数组,有重复,求某个元素出现次数。
2、排序的整型数组,有重复,求某个元素出现次数。
|
chuaInQZNov 11, 2017 via Android
1
1 尾递归
2 二分查找+前后遍历 |
|
geelawNov 11, 2017 via iPhone
2
???这个真的连水都算不上
第一个用快速幂的递归写法即可满足要求,而且比迭代要快(如果四则运算是常数) 第二个用 upper_bound 和 lower_bound 的算法即可 |
|
LxExExlNov 11, 2017 via iPhone
3
2 二分查找 变换下等号就行了
|
|
geelawNov 11, 2017 via iPhone
4
哦第一个还可以更简单,只要形参和返回值都是 pair 即可
|
|
5
@LxExExl 绝知此事要躬行
|
|
LxExExlNov 11, 2017 via iPhone
6
@begeekmyfriend 愿闻其详
|
|
7
|
|
8
@geelaw 不懂你的“快速幂”是啥意思,方便贴一下么?还是利用某种语言的黑科技?
|
|
9
@begeekmyfriend fibonacci 是线性关系可以用矩阵表示,矩阵乘法可以用类似普通幂乘的优化
|
|
qwlhappyNov 11, 2017
10
这不是...C 语言课后习题的水平?虽说想做到最优可能都要仔细考虑下
|
|
11
|
|
12
说第二题很水的我有理由怀疑对方二分编程有没有真正掌握,一写都是 O(N)
|
|
neosfungNov 11, 2017
13
def foo(n, a=0, b=1):
return foo(n-1, b, a+b) if n>0 else a+b |
|
neosfungNov 11, 2017
14
第二题直接用二分命中一个后,线性搜索前后的数字就行了,最坏情况 O(n)
|
|
15
@neosfung 线性就淘汰,哈哈
|
|
neosfungNov 11, 2017
16
|
|
sagaxuNov 11, 2017 via Android
18
太水了,第一题递归加 cache,第二题两次二分法确定这个数的首尾位置再相减得到个数
|
|
LxExExlNov 11, 2017 via iPhone
19
@begeekmyfriend 我去年找工作 lc 算下来刷了起码两遍 重点题三遍 基本到最后每个题都是 10 分钟一次性 ac...
|
|
helicaNov 11, 2017 via iPhone
21
感觉有点低估 v 站的 coding 水平了:D
|
|
zjbztianyaNov 11, 2017
22
@xiang578 1e9+7 暴露了你是 ACMer...
|
|
xiang578Nov 11, 2017
23
@zjbztianya #22 你这是和我同归于尽……
|
|
24
//第一题:
public class Fibonacci { /** * /a b/ * /c d/ */ private static class Matrix{ int a; int b; int c; int d; public Matrix(int a, int b, int c, int d) { this.a = a; this.b = b; this.c = c; this.d = d; } } public static void main(String[] args) { Arrays.asList(1,2,3,4,5,6,7,8,9,10).stream().forEach(n->System.out.println(fibonacci(n))); } public static int fibonacci(int n){ if(n==1) return 0; return Fib(n-1).b; } public static Matrix Fib(int n){ if(n==1) return new Matrix(1,1,1,0); return (n&1)==0?multi(Fib(n/2),Fib(n/2)):multi(Fib(n/2),Fib(n/2 + 1)); } private static Matrix multi(Matrix m1,Matrix m2){ return new Matrix( m1.a*m2.a+m1.b*m2.c, m1.a*m2.b+m1.b*m2.d, m1.c*m2.a+m1.d*m2.c, m1.c*m2.b+m1.d*m2.d ); } } |
|
25
斐波那契校招面试一般这么问
1. 斐波那契知道吧,递推式写一下,顺便最简单的递归来写一个 2. O(n)行不行,迭代来写一个 3. 能不能再快点,矩阵快速幂推导一下,快速幂写一个 4. O(1)办得到吗?特征根求一下,通项解出来。特征根原理? |
|
jedihyNov 12, 2017
26
1. fib 用 DP 就行,递归都不用。
2. 两次二分即可,两次二分只有等号情况处理不同。 |
|
skadiNov 12, 2017
27
namespace dd {
using ll = long long; template <ll n> struct Fib { enum { value = Fib<n - 1>::value + Fib<n - 2>::value }; }; template <> struct Fib<0> { enum { value = 0 }; }; template <> struct Fib<1> { enum { value = 1 }; }; } int main(){ std::cout<<dd::Fib<10>::value<<std::endl; } 斐波那契用模版元编译期计算算不算作弊? :huaji: PS:虽然文不对题 PPS:炸出了很多 acmer 啊 |
|
skadiNov 12, 2017
28
第一题,快速幂
第二题 2 个二分 |