codility上的练习 (1)
codility上面添加了教程。目前只有lesson 1,讲复杂度的……里面有几个题, 目前感觉题库的题简单。
tasks:
Frog-Jmp:
一只青蛙,要从X跳到Y或者大于等于Y的地方,每次跳的距离为D,问至少跳几次。 X,Y,D都是[1..10^9]的整数。
要求时间空间复杂度O(1)。
这个题比较简单,就是做除法嘛,我们不知道X是否已经不小于Y了,我加了个判断,不过也就一句话。
代码:
// you can also use includes, for example:// #include <algorithm>vector<int> temp;int help(vector<int> &A,int from,int to) {int i,j,r,r1,r2,mid; if (to - from <= 0) { return 0; } mid = (from + to) >> 1; r1 = help(A, from, mid); if (r1 > 1000000000) { return -1; } r2 = help(A, mid + 1, to); if (r2 > 1000000000) { return -1; } if ((r = r1 + r2) > 1000000000) { return -1; }temp.clear(); for (i = from, j = mid + 1; (i <= mid) && (j <= to);) { if (A[i] <= A[j]) { temp.push_back(A[i++]); } else { if ((r += mid - i + 1) > 1000000000) { return -1; } temp.push_back(A[j++]); } } for (;i <= mid;++i) { temp.push_back(A[i]); } for (;j <= to; ++j) { temp.push_back(A[j]); } for (i = from; i <= to; ++i) { A[i] = temp[i - from]; } return r;}int solution(const vector<int> &A) { // write your code here...vector<int> a = A; return help(a, 0, a.size() - 1);}