程序员面试指南
Nozuowilldie
这个作者很懒,什么都没留下…
展开
-
重造轮子 用递归函数和栈操作逆序一个栈
目标:仅使用递归与栈操作将栈逆序。方法:有点利用回溯法的味道。在递归操作中做两次取栈顶元素的操作后,并将第一次取得的栈顶元素再入栈。这个操作可以将原栈中最顶部的元素压入栈底。当递归函数返回时,再将另一个取栈顶操作获得的元素压入栈。然后在对从栈顶到次栈底这一段元素调用上诉操作。代码:class Solution{public: void reverseStack(stack& s){//原创 2015-10-19 19:53:05 · 532 阅读 · 0 评论 -
重造轮子-最小栈
目标:构建一个栈,以O(1)的时间复杂度返回栈内数据的最小值。方法:用两个栈实现,一个存放原数据,一个存放最小值。对于原数据栈按普通的栈规则进行出栈入栈,对于最小值栈则按照入栈规则1、如果栈为空直接将当前的输入数入栈;2、如果输入数小于等于最小值栈栈顶元素的值,那么将该输入数入栈;出栈规则1、如果原数据栈弹出的元素等于最小值栈顶的元素,那么最小值栈顶的元素也弹出;2、如原创 2015-09-19 17:39:49 · 432 阅读 · 0 评论 -
重造轮子-栈实现队列
目标:用两个栈实现一个队列数据结构方法:栈是先入后出,队列是先入先出。那么对于入队列就是,普通的压栈操作。对于返回队列首元素呢,则是将栈B的元素全部顺序出栈,压入栈A,然后再将栈A的栈顶元素出栈。对于弹出队首元素呢,则是与返回队列首元素的操作相同。代码:class Solution{public: void push(int num){ strDataTwo.push(num)原创 2015-09-19 22:46:28 · 572 阅读 · 0 评论 -
重造轮子-random5到random7
目标:有一个rand5函数可以随机产生0~4这5个数,设计一个rand7函数,利用这个rand5函数随机产生0~6这7个数。方法:面试这一题,第一想法就是要用编码的思想。那么想表达完所有的7个数需要调用两次rand5函数,因为调用两次rand5函数可以产生的组合为5*5个组合。那么在看看rand5()产生0,1,2,3,4,rand5()*5产生0,5,10,15,20发现rand原创 2015-09-21 20:41:10 · 3109 阅读 · 0 评论 -
重造轮子-sqrt
目标:实现sqrt开方函数。方法:如果返回值是int值,可以用二分法来做。是通过x的平方与待开方数进行比较,取最接近的数。这里说的不是这个方法。因为面试时,你说二分法他们不满意,问有没有更好的方法。当然是有的,用牛顿迭代法。牛顿迭代法:是数学中一种求解近似值的方法。如下图所示就是牛顿迭代法的简单推导那么对于求开方这个问题,则就是解函数,如下图所示代码class So原创 2015-09-21 20:02:45 · 588 阅读 · 0 评论