
一些经典的算法面试题
coder_vivid
鹅厂码农
展开
-
实现左移指定位数,时间复杂度O(n) ,空间复杂度O(1)
实现左移指定位数,时间复杂度O(n) ,空间复杂度O(1);如题,这个算法思想是根据矩阵的逆秩运算得到的。假设我们要处理的串为ab,那么左移一位,也就是把它变成ba。而这不得不使我们联想到矩阵的求逆运算,矩阵求逆公式如下:(a^T * b^T) ^T = ba也就是说,我们可以把这个问题转换到,求逆秩的问题上来。根据这个思想假设我们所求问题为,左移3位,序列为0 1 2 3 4 5原创 2015-06-17 00:49:20 · 1336 阅读 · 0 评论 -
不用加减乘除实现加法
整理下之前写过的一下东西,如题,不用加减乘除实现加法,代码如下:#include int add(int a, int b);int main(int argc, char** argv) { int a = 0; int b = 0; scanf("%d%d", &a, &b); printf("result is: %d", add(a, b)); return原创 2015-11-24 19:56:57 · 514 阅读 · 0 评论 -
对1...n,数组长度未知进行交换排序(无重复值,时间复杂度O(n), 空间复杂度O(1))
对1...n,数组长度未知进行交换排序(无重复值,时间复杂度O(n), 空间复杂O(1))。这个题也是一个比较经典的面试题,大概思想是这样的:假设,有5个小朋友,D,B,E,A,C,那么,我们要实现他们的排序,可以先对他们依次进行编号:ABCDE分别代表的编号为01234,那么我们可以模拟一下这个过程:1、首先,第一个元素是D,也就是3,那么我们要做的操作就是,交换D和占据3号位置的元素,原创 2015-06-16 01:29:40 · 791 阅读 · 0 评论 -
使用C++11thread实现的一道面试题(一)
题目描述: 子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。//题目:子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。#include #include #include原创 2015-07-04 14:27:53 · 2950 阅读 · 0 评论 -
获取未知长度单链表的中间节点
获取未知长度单链表的中间节点原创 2015-06-14 23:55:30 · 687 阅读 · 0 评论 -
求最大公约数(欧几里得算法)
求解两个数的最大公约数,经常被用到,但是要做到高效求解,最常用的就是欧几里得算法了,也叫做“辗转求余法”,公式是这样的: gcd(a,b) = gcd(b,a%b)这个公式来源于数论,至于如何推导得到,网上有大量的教程资料,我就不再赘述了,这里说说它的实现过程。递归实现代码如下:#include using namespace std原创 2015-06-23 00:11:48 · 1064 阅读 · 0 评论 -
计算n以内的所有素数
寻找素数我们最常用的方法是暴力求解法,就是没对于每个数n,从2找到n的开方,判断每个数是不是素数,时间复杂度度为O(nlog2n),时间复杂度高,是肯定的,因为太“暴力”,所以,我想换个思路,其实求素数的过程,就是去除合数的过程,如果对于一个散列,去除了合数,那么留下的就是素数了,代码如下:#include using namespace std;void prime(unsigned原创 2015-06-23 10:08:18 · 3386 阅读 · 0 评论 -
判断两个单链表是否相交
首先,拿到这个题,我们第一反应可能是这样的:假设分别为A链表和B链表,那么只要每次得到一个A中的元素的地址值,就与B的所有节点的地址值比较,一直进行下去,直到,找到相等的节点或者A链表跑完了,那么这个思路会导致我们的问题时间复杂度,为O(length(A) * length(B)),显然,这个思路不可取。那么还有什么比较好的办法呢?答案是肯定的,假设两个单链表相交,那么他们相交之后会合成一个链表就原创 2015-06-22 17:16:12 · 487 阅读 · 0 评论 -
判断两棵二叉树是否相等
问题描述:给定两个二叉树的根节点,判断两棵二叉树是否相等(左右相等或者左右交换后对应相等),代码如下:#include using namespace std;typedef struct TreeNode{ char data; TreeNode *leftchild; TreeNode *rightchild;}TreeNode;TreeNode * CreateBTr原创 2015-06-22 16:50:05 · 5628 阅读 · 0 评论 -
实现C++string的赋值函数
之前一直敲C语言,对C++有点疏忽了,前两天看到《剑指offer》一道关于这个问题解法的面试题,于是动手敲了一下,却发现自己给的解法只是初级解法。总结原因,还是自己没有充分利用C++的特性,只是站在C语言的角度在写C++程序。首先,分析一下这个问题要求: 1.实现对象赋值(深拷贝); 2.传入对象应该是const的,防止对象的值被修改;原创 2015-11-23 18:30:26 · 4146 阅读 · 0 评论