摘要: 1. 简述 设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。求解方法1:voidRightShift(char*arr,intN,intk){ k= k % K;while(k--){chart=arr[N-1];for(inti=N-1;i>0;i--)arr[i]=arr[i-1];arr[0]=t;}}求解方法2:#include <stdio.h>#define N 10void Loop_Shifting(int a[], int n, int k);void Reverse(int a[], int low, 阅读全文
posted @ 2012-03-06 14:53 Never To Say Impossible 阅读(140) 评论(0) 推荐(0) 编辑
摘要: Fibonacci数列: 描述了动物繁殖数量、植物花序变化等自然规律。作为一个经典的数学问题,Fibonacci数列常作为例子出现在程序设计、数据结构与算法等多个相关学科中。 1.递归法。大多数教材在讲解递归算法时总喜欢以Fibonacci数列为例,这是因为我们可以直观地从定义公式的第三行看出Fibonacci数列的递归性。其C++实现如下:unsigned long Fib(int n){ if (n <= 1) { return n; } else { return Fib(n - 1) + Fib(n - 2); }} 递归算法与定义公式... 阅读全文
posted @ 2012-03-06 13:54 Never To Say Impossible 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 1. 简述 给定一个源区间[x,y] (y>=x)和N个无序目标区间[x1,y1][x2,y2][x3,y3]...[xn][yn],判断[x,y]是否在目标区间内。2. 思路 这个比较简单,合并目标区间,判断源区间是否在目标区间内即可。具体过程如下:第一步,先把目标区间排序。 第二步,从第一个区间开始,遍历首先找到一个[xi,yi],使得 x[i]<= X <= y[i],如果找不到,说明不在目标区间内,如果找到了并且yi>=y,那么结束工作,源区间在目标区间内,如果找到了,但是yi<y,那么还需要继续遍历,进入第三步。 第三步,继续遍历[xi,yi],如果xi 阅读全文
posted @ 2012-03-06 09:00 Never To Say Impossible 阅读(474) 评论(0) 推荐(0) 编辑