算法/OJ
woniuzaihhx
这个作者很懒,什么都没留下…
展开
-
斐波那契数列(非递归方法)
斐波那契数列1,1,2,3,5.。。。就是斐波那契数列的定义啦!就是第n项是前面第n-2,n-1项之和。 传统方法是使用递归方法求解。可是性能不够好,需要栈来保存函数调用的信息。非递归(迭代)方法空间换时间,在数组中保存整个数列 int Fibonacci(int n) { if(n==0) return 0; if(n==1) return 1;原创 2017-01-19 20:46:12 · 449 阅读 · 0 评论 -
替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。void replaceSpace(char *str,int length) { int space=0; int l=0; char *temp=str; while(*str!='原创 2017-02-10 20:40:50 · 179 阅读 · 0 评论 -
从尾到头打印链表
输入一个链表,从尾到头打印链表每个节点的值。思路:若能更改链表结构,翻转链表再打印出来;若不能,则可以使用栈,递归。 vector printListFromTailToHead(struct ListNode* head) { //if(head==0) return 0; vector result; while(head!=N原创 2017-02-10 22:18:51 · 150 阅读 · 0 评论 -
重建二叉树(前序,中序序列建树)
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * struct TreeNode { * int val; *原创 2017-02-12 17:04:28 · 659 阅读 · 0 评论 -
两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型 初始思路: 1,2都空:压:1;出:错 1有2空:压:1–>2,压1 出:1–>2,出2 1空2有:压1,出:2 1,2都有: 压1,出2class Solution{public: void push(int node) { if(stack2.size()==0){原创 2017-02-12 19:11:39 · 184 阅读 · 0 评论 -
旋转数组的最小值
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:类似二分查找,不断缩小查找范围:int minNumberInRotate原创 2017-02-13 12:28:20 · 185 阅读 · 0 评论 -
跳台阶(同斐波那契数列)
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 递归方法: int jumpFloor(int number) { if(number==1) return 1; if(number==2) return 2; if(number<=0)原创 2017-02-13 16:59:56 · 282 阅读 · 0 评论 -
变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 int jumpFloorII(int number) { if(number<=0) return 0; if(number==1) return 1; if(nu原创 2017-02-13 17:13:22 · 168 阅读 · 0 评论 -
矩形覆盖(同斐波那契数列)
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? int rectCover(int number) { if(number==0) return 0; if(number==1) return原创 2017-02-13 17:32:43 · 308 阅读 · 0 评论 -
循环有序数组查找
循环有序数组:形如{7,8,9,0,1,2,3,4,5,6}的数组。 如何快速的查找某一个元素是否在数组中呢? 追求比遍历更快的方法。。。类似二分查找的方法://n:array length,若存在目标元素,返回目标在数组的位置int search(int A[], int n, int target){ if(n<=0) return -1; int lef原创 2017-01-19 15:54:06 · 431 阅读 · 0 评论 -
二维数组的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路:需要从右上角开始遍历,或者从左下角开始遍历,因为右上角往下运动是递增,往左运动是递减。左下角往上运动是递减,往右运动是递增。而其他两个点开始遍历是同增或同减的,无法唯一确定。 右上角开始遍历:class Solu原创 2017-02-10 19:07:36 · 159 阅读 · 0 评论