030day(通过例题了解程序时间复杂度)
来源:互联网 发布:mac放大窗口的快捷键 编辑:程序博客网 时间:2024/06/01 21:33
172210704111- 陈国佳总结《2017年11月9日》[连续030天]
标题:通过例题了解程序时间复杂度;
内容:A.
a.输入n(n<=100,000)个整数,找出其中的两个数,它们之和等于整数m(假定肯定有解)。题中所有整数都能用int表示:
思路:
解法1:两重循环,枚举,复杂度是O(n^2);大约为100亿,超时!
解法2:
1)将数组排序,复杂度是O(n*log(n))底数是2;
2) 对数组中的每个元素a[i],在数组中二分查找m-a[i]。复杂度是log(n),最坏查找n-2,这部分的复杂度也是O(n*log(n)) ;
解法3:
1)将数组排序,复杂度是O(n*log(n));
2) 查找的时候,设置两个变量i和j,i初值说0,j初值是n-1.看a[i]+a[j],如果大于m,就让j-1,如果小于m,就让i+1;,直至a[i]+a[j]=m;
总复杂度说O(n*log(n));
b.农夫John建造了一座长畜栏,它包括N(2<=n<=100,000)个隔间,这些小隔间的位置为x(0),.....,x(n-1)(0<=x(i)<=1,000,000,000)
John的C(2<=C<=N)头牛每头到一个隔间。使任意两头牛之间的最小距离经可能大,则最大的最小距离说多少?(百练 2456)
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
思路:
解法1:1)排序;
2)把第一头放在x(0);
3)若第k头牛放在x(i), 则找到x(i+1)到x(n-1)中第一个位于[x(i)+D,1,000,000,000]中的x(j),第k+1头牛放在x(j)。找不到,就D=D-1,转2)重复;
复杂度 1,000,000,000/C*N,即 1,000,000,000,超时!
解法2:
1)排序;
2)在[L,R]内用二分法尝试“最大最近距离”D=(L+R)/2(L,R初值为[1, 1,000,000,000/C])
若D可行,则记住该D,然后在新[L,R]中继续尝试(L=D+1)
若 D不可行,则在新[L,R]中继续尝试(R=D-1)
复杂度 log(1,000,000,000/C)*N;
明日计划:学习STL排序算法sort;
- 030day(通过例题了解程序时间复杂度)
- 028day(时间复杂度的了解和各进制的复习)
- 程序时间复杂度计算(一)
- 程序时间复杂度
- BS程序如何通过浏览器了解点击响应时间
- 038day(枚举例题(称硬币)的练习和类和对象的基本概念的初步了解)
- 时间复杂度(分析程序效率)
- 程序的时间复杂度计算
- 如何计算程序时间复杂度(实战篇)
- 收藏(时间复杂度)
- 【小白日记】C语言实现最小代价生成树,并测试算法其时间复杂度(day 1)
- lisa程序的时间空间复杂度分析
- 程序时间复杂度的计算小结
- 编程:关于程序的时间复杂度
- 程序算法的时间复杂度计算
- 计算时间复杂度 -- 写程序需瞻前顾后
- 如何计算程序的时间复杂度
- 递归程序的时间复杂度计算
- python读取txt各个数字
- 模板 2017-11-09 矩阵 单位化矩阵 矩阵的相乘和快速幂
- 单链表+学生信息管理系统
- 输出乘法口诀表
- 【组合+错排】BZOJ4517(Sdoi2016)[排列计数]题解
- 030day(通过例题了解程序时间复杂度)
- Ubuntu16.04下安装JDK
- Java JUnilt4单元测试
- redis 设置开机启动
- 过滤器、监听器、拦截器的区别杂谈
- kmp模板 hdu1711
- c++ rdbuf流指针重定向
- 《Web接口开发与自动化测试基于Python语言》--第15章
- Permutations