1.看《大话数据结构》时间复杂度知识点
主要学习内容:
2.刷题
问题一 快速幂取余,你真的会了吗?
描述(大致内容)
题目如下,给你一段快速幂的代码,请帮忙快速的求出这个代码的复杂度。因为在2进制王国一切都是2进制表示的,所以这里给你的a,b都是一个2进制的数(可能会很大)所以我们假设2进制王国的int是无穷大的,并不会出现溢出的情况。显然这个问题的复杂度与余数n无关,所以并不给出n迷惑大家。
格式
输入格式
第一行输入一个由0 1构成的二进制字符串a
第二行输入一个由0 1构成的二进制字符串b
代表问题中的a的b次幂,不包括前置0。
a和b的长度都小于等于5000。
输出格式
输出一个十进制的值代表count的值。表示此问题中的复杂度。
解题思路:其实这个题的时间复杂度与a字符串没有关系,我们只需要考虑b字符串,(有点直接粗暴,但暂时想不出其他解决办法),看b字符串中有几个0和几个1,用两个变量x,y进行统计,当为0时,count++,当为1时,count+=2,且当1在首位时,只需要加1,由此可得,count=2*y+x-1。
问题二
解题思路:定义全局变量n,k和数组z,这样在后面使用起来会更方便。定义一个函数用来判断(主函数中的mid)是否满足条件,即能否得到k条相同长度的绳子,若满足,则返回值为0,不满足则返回值为1。输入数组的所有值后,找出最长的绳子,对其进行二分,当返回值为1时,再次进行二分,当返回值为0时,令r=mid-1,再将r/100.0即可得到最终答案。
关键代码:
特别注意:在输入数组中的值时,应先乘上100.0,在最后输出时再除以100.0,这样做是为了防止精确度不对。
3.今日总结
刷题数:2
学习时长:7h
不足:题目当中的一些细节问题容易忽视或者找不到解决办法,思考问题不够敏锐,需要想很久才能找出解决办法。