习题:
使用的算法归纳:
算法一:Select算法,在无序数组中找第k大数字,时间复杂度O(n)
[如果是最大,最小,第二大,采用比较算法]
算法二:若有两个毫无关系的数组进行关系匹配,考虑小的排序,大的进行二分查找
如题目八,题目十
算法三:取数组的中间值,将关系数组化为两部分,形成分治
如题目十,题目十一,题目十二,题目十五
算法四:中位数距离其他数字距离和最小
补充:伪代码的书写规范
1:其中注意if (----)then-----中判断语句可以使用(=,》=,《=)
2:多重嵌套的话利用 if----then------
elseif-----then-----
else----
注意对齐代表范围,类似于Python
格式问题:
1:方法名字,输入,输出
2:左列标号
3:ifthenelse. whiledoen goto <-(变量直接写而不用申请)
4:递归方法或者调用过程
5:描述性语言。对于难以用符号表达的语句,用描述性语言表达
题目一:汉诺塔问题
解析:答案说的很清楚了。注意将A到C移动两个盘子表示为BiMove(A,C)说明对于某个过程或者动作直接用函数代替就好。
另外要注意T(1)=2 表示的是当只有两个盘子时需要移动两次
题目二:峰顶问题
解析:类似于leetcode中的旋转数组的最小值问题,关键在于在奇异点
对于K。
若L(K-1)<L(K)&&L(K)>L(K+1) 则return K
若L(K-1)<L(K)<L(K+1)说明在左斜坡