july算法1——算法初步

1.算法复杂度

  • 谈算法不谈复杂度=耍流氓
  • 在实现之前,我们要预估算法所需要的资源
    时间:基本操作次数(汇编指令条数)
    空间:占用内存字节数
    区别:空间可以再利用
  • O(1)
    基本运算,+,-,*,/,%,寻址
  • O(logn)
    二分查找
  • O(n1/2)
    枚举约数
  • O(n)
    线性查找
  • O(n2)
    朴素最近点对
  • O(n3)
    Floyd最短路
    普通矩阵乘法
  • O(nlogn)
    归并排序
    快速排序的期望复杂度
    基于比较排序的算法下界
  • O(2n)
    枚举全部的子集
  • O(n!)
    枚举全排列
  • 总结:
    优秀 O(1) < O(logn) < O(n1/2) < O(n) < O(nlogn)
    可能可以优化 O(n2) < O(n3) < O(2n) < O(n!)

2.从暴力算法开始优化

2.1 Leetcode 121

Best Time to Buy and Sell Stock

2.2 最大子数组和

给定数组a[1…n],求最大子数组和,即找出1<=i<=j<=n,使a[i]+a[i+1]+…+a[j]最大。

2.2.1 暴力枚举 O(n3)

2.2.2 优化枚举 O(n2)

2.2.3 贪心法 O(n)

2.2.4 总结

3.思考题

3.1 设计一个队列

支持:出队,入队,求最大元素
要求O(1)
均摊分析

3.2 判断是否构成三角形

给定一个正整数组a,是否能以3个数为边长构成三角形?
即是否存在不同的i,j,k,
满足 a[i] < a[j] + a[k]
并且 a[j] < a[i] + a[k]
并且 a[k] < a[i] + a[j]

3.3 Leetcode 152 Maximum Product Subarray

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,043评论 0 2
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 6,179评论 0 2
  • 本文仅为作者自学之用,系统为macOS,不保证信息准确。 Flask的上下文使用 写惯了java或者python等...
    萧瑟空间阅读 3,408评论 0 0
  • 十月六日,晴(五) 惊心动魄的第一天 当时公寓里有三个女孩:吵架的女孩Fei,短头发女孩雨涵,还有个沉默的妹子Iv...
    夏槿11阅读 2,325评论 0 3
  • redis的集群方案现在主要有三种(不考虑云集群),一种是豌豆荚的codis,codis是豌豆荚的团队在redis...
    江江的大猪阅读 2,256评论 0 1

友情链接更多精彩内容