数组
引言:天平与假币
1.天平平衡
2.左A比右B重
理论下界
求局部最大值
问题分析
算法描述
Code
第一个缺少的整数
循环不变式
利用循环不变式设计算法
合并相同的分支
Code
举例
- 开始数组:a=[3 5 1 2 -3 7 4 8]
首先1<a[1]=3<8 交换a[1],a[3] 》》[1 5 3 2 -3 7 4 8] - 第二次while:a[1]=1 ,i++
- 第三次:2<a[2]=5<8 交换a[2],a[5] 》》[1 -3 3 2 5 7 4 8]
- 第四次:a[2]=-3<2 交换a[2],a[8] 》》[1 8 3 2 5 7 4 -3]
并且数组长度减1 》》[1 8 3 2 5 7 4] - 第五次:a[2]=8>7 交换a[2],a[7] 》》[1 4 3 2 5 7 8]
并且数组长度减1 》》[1 4 3 2 5 7] - 第六次:2<a[2]=4<8 交换a[2],a[4] 》》[1 2 3 4 5 7]
后面就是i++,直到i>size,输出i=6,也即是最终答案。
查找旋转数组的最小值
分析
Code
零子数组
算法流程
Code
举例
- 开始数组:1 -2 3 10 -4 7 2 -5
- 前n项和: 1 -1 2 12 8 15 17 12
- 排序后 -1 0 1 2 8 12 12 15 17
- 对排序后数组后项减前项:1 1 1 6 4 0 3 2
- 最小值是0 ,找到相减为0的两个前n项和,剔除两个序列的交集部分,就得到了最终结果
- 结果 -4 7 2 -5
两个序列之间的和差表示这两个序列的差集的和
最大子数组和
分析
举例
- 开始数组:1 -2 3 10 -4 7 2 -5
- 前n项和: 0 1 -1 2 12 8 15 17 12 (定义a[-1]=0)
- 找到以第x位结尾的子序列的最大值
- 以10结尾的序列 1 -2 3 10 中最大序列 3 10
进一步分析
动态规划Code
思考
参考代码
最大间隔
问题分析
解决思路
Code
字符串的全排列
递归算法
递归Code
如果字符有重复
Code
空间换时间
全排列的非递归算法