编程之美/剑指offer
我是大龙啊
这个作者很懒,什么都没留下…
展开
-
数组右移
下面我们来看下题目的要求。题目要求:设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N)O(N),且只允许使用两个附加变量。题目解答我们来自己给个例子,来帮助自己思考。如数组为[1, 2, 3, 4, 5, 6, 7, 8],循环移位4次。 原始序列:[1, 2, 3, 4, 5, 6, 7, 8] 右移1位:[8, 1, 2, 3, 4, 5, 6, 7] ...转载 2019-08-07 15:13:52 · 328 阅读 · 0 评论 -
求最大公约数
最大公约数两种求法#include "iostream"#include "algorithm"using namespace std;int flag = 0;//解法1:辗转相除法//假设用f(x,y),x > y,表示x,y的最大公约数,取k = x/y,b = x%y//则x = ky+b,如果一个数能同时整除x,y则必能同时整除y,b;int gcd(int x,...原创 2019-08-06 00:02:50 · 193 阅读 · 0 评论 -
最大乘积子数组
最大乘积子数组这个问题可以采用和求序列的最大和子数组同样的动态规划,不同的是此类问题除了记录以上一个为结尾的子序列的最大乘积外还应记录最小乘积,因为下一个可能是负数,负负得正。核心代码如下以当前数为结尾的子序列的乘积的最大值和最小值cur_max = max(max(last_max * a[i], last_min*a[i]),a[i]);cur_min = min(min(last_...原创 2019-08-05 22:03:17 · 168 阅读 · 0 评论 -
寻找距离最小的点对
问题描述:给定平面上N个点的坐标,找出距离最近的两个点。解决方法:参考编程之美书上所介绍的解法三(分治思想)。方法框架: 1. 将点按照x坐标排序,找到中间点M将所有点分成两个部分,Left和Right。找出Left和Right区域分别最小的两点距离DisL, DisR, 则最短距离为DisMin=Min(DisL, DisR);在所有节点中找到x属于(M.x-DisMin,...原创 2019-08-13 16:10:28 · 1350 阅读 · 0 评论