2021-01-22

本文介绍了快速幂取余的算法及其时间复杂度分析,重点在于理解如何根据二进制字符串计算复杂度。同时,通过一道关于绳子分割的问题,展示了利用二分查找优化解题过程的方法。在总结中,作者认识到需要提升对题目细节的敏感度和解题速度。
摘要由CSDN通过智能技术生成

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
不足:题目当中的一些细节问题容易忽视或者找不到解决办法,思考问题不够敏锐,需要想很久才能找出解决办法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值