数据结构错题集

在这里插入图片描述
在这里插入图片描述
这里的各项操作应该不包括遍历,记忆:哈希用空间换时间(和恶魔做了交易),所以哈希全是1(一般不讨论哈希的遍历),平衡树很平衡,查找、插入、删除全是log,数组链表可以自己推。

在这里插入图片描述
这题要看到 2 ∗ 3 ∗ 5 ∗ 0 2*3*5*0 2350 2 ∗ 3 ∗ 5 ∗ 1 2*3*5*1 2351之间总共有22个数字。且 2 ∗ 3 ∗ 5 ∗ i 2*3*5*i 235i 2 ∗ 3 ∗ 5 ∗ ( i + 1 ) 2*3*5*(i+1) 235(i+1)之间都是这22个数字按顺序排列+ 2 ∗ 3 ∗ 5 ∗ i 2*3*5*i 235i的结果,就很容易算出1500除22商68余4,第4个数是5,对应 2 ∗ 3 ∗ 5 ∗ 68 + 5 = 2045 2*3*5*68+5=2045 23568+5=2045

三、连续自然数之和为1000的共有几组?(m,n都为自然数,单独1个数也算作“连续自然数”)

考虑连续个数n
当连续个数为奇数时,比较好求,中值为x,xn=1000.这个时候回头想起找1000的因子, 1000 = 2 3 ∗ 5 3 1000=2^3*5^3 1000=2353。n为奇数的话,只有可能是 5 0 、 5 1 、 5 2 、 5 3 5^0、5^1、5^2、5^3 50515253四种可能取值,其中 5 3 5^3 53算出来x过小,连续数列里面产生负数,去掉。奇数情况有3种。


当n为偶数时, 设n=2k,设中位数为 m + 1 2 m+\frac{1}{2} m+21,m,k为整数。则 2 k ( m + 1 2 ) = 1000 2k(m+\frac{1}{2})=1000 2km+21=1000
k ( 2 m + 1 ) = 1000 k(2m+1)=1000 k(2m+1)=1000
同样2m+1的可能取值为 5 0 、 5 1 、 5 2 、 5 3 5^0、5^1、5^2、5^3 50515253四种。但 5 0 、 5 1 、 5 2 5^0、5^1、5^2 505152三种取值都会造成n过大,连续数列里面有负数。所以偶数情况只有一种。
综上,总共有4组。

四、

在这里插入图片描述
看了答案,觉得结论更重要,首先记住一个数列,叫卡特兰数。
在这里插入图片描述
这有什么用?第n个卡特兰数等于:
1、n个节点的二叉树有多少种(作者想到自己考研的时候还在纸上一个个画,顿时觉得心酸)
2、n个数按规定顺序入栈,有多少种出栈方式。
然后再回头看这个问题,不考虑1块,只考虑5毛(因为在这个问题里面,一块钱的多少是没有价值的,5毛才可以用来找零)当有人拿5毛来的时候,就好比那个人入栈了,当有人拿1块来买的时候,就要有之前的一个5毛出栈。这里的排队方法应该指的是将所有5毛的人看做同一类人,所有一块看做同一类人,否则具体讨论某个人就没有太大意义。
然后。。。。。套公式就好,什么!公式推导过程?我给一下链接:
卡特兰数的推导过程

在这里插入图片描述
不停的两两合并,时间复杂度是 N 2 ∗ M N^2*M N2M显然不对。
看到有一个人想法很好。
在这里插入图片描述
确实牛逼。。。

在这里插入图片描述
快排和数距离最终位置没有关系,影响快排的永远只有每次的中间数的选取,每次都选边界数,显然就n*n了
堆排序:复杂度一直是O(nlog(n));很中庸
直接选择作为最垃圾的排序,一直是 n 2 n^2 n2
那为什么是插入排序,这个应该反过来思考,假设一串数已经排好了,你从里面拿一个放到最后面(插入的反向操作),这个时候因为有“距离最终位置不远”的规定,你只能选取排好队列的后几位。然后不断重复。当你全部打乱之后,再插入排序的时候,每次也只是比较后几个数就插进去了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值