笔试算法题(02):N阶阶乘 & 双向循环链表实现
出题:N阶阶乘问题的递归算法和非递归算法;
分析:
- 第一种解法:普通暴力解法的实现较为容易;
- 第二种解法:stirling公式可快速给出近似解;
解题:
int Recursive(int s) {
if( == s) {
return s;
}
return s*Recursive(s-);
}
int NonRecursive(int s) {
int temp=;
int result=;
while(temp<=s) {
result*=temp;
temp++;
}
return result;
}
int main() {
int s=;
printf("recursive output: %d\n",Recursive(s));
printf("non-recursive output: %d",NonRecursive(s));
}
出题:双向循环链表的插入,查找与删除;
分析:构造类的过程中需要进行的核查
解题:
#include <stdio.h>
/**
* 检查是否需要构造函数
* 检查是否需要无参构造函数
* 检查是否需要成员变量(函数)私有
* 检查是否需要在使用成员初始化列表
* 检查是否需要析构函数
* 检查是否需要虚拟析构函数
* 检查是否需要复制构造函数(参数为const)
* 检查是否需要赋值重载函数(参数为const)
*
* */
class Node {
public:
int value;
Node *next;
Node *last;
Node(int v=): next(NULL),last(NULL) { }
~Node() {
if(next!=NULL) delete next;
if(last!=NULL) delete last;
}
};
class DDList {
public:
Node *head;
DDList():head(new Node()) {
head->last=head;
head->next=head;
}
DDList(const DDList& target) {}
DDList& operator=(const DDList& target) {}
void insertN(int v) {
Node *newn=new Node(v);
Node *temp;
temp=head->next;
head->next=newn;
newn->next=temp;
newn->last=head;
temp->last=newn;
}
bool deleteN(int v) {
Node *target=queryN(v);
Node *temp;
if(target == NULL) return false;
temp=target->last;
temp->next=target->next;
target->next->last=temp;
delete target;
return true;
}
Node* queryN(int v) {
Node *temp=head->next;
while(temp != head) {
if(temp->value == v) return temp;
temp=temp->next;
}
return NULL;
}
void destroy() {
if(head->next == head) return;
deleteN(head->next->value);
}
void printList() {
Node *temp=head->next;
while(temp != head) {
printf("current point: %d",temp->value);
temp=temp->next;
}
}
~DDList() {
if(head->last == head) delete head;
else destroy();
}
};
笔试算法题(02):N阶阶乘 & 双向循环链表实现的更多相关文章
- 前端如何应对笔试算法题?(用node编程)
用nodeJs写算法题 咱们前端使用算法的地方不多,但是为了校招笔试,不得不针对算法题去练习呀! 好不容易下定决心 攻克算法题.发现js并不能像c语言一样自建输入输出流.只能回去学习c语言了吗?其实不 ...
- 笔试算法题(46):简介 - 二叉堆 & 二项树 & 二项堆 & 斐波那契堆
二叉堆(Binary Heap) 二叉堆是完全二叉树(或者近似完全二叉树):其满足堆的特性:父节点的值>=(<=)任何一个子节点的键值,并且每个左子树或者右子树都是一 个二叉堆(最小堆或者 ...
- 笔试算法题(54):快速排序实现之单向扫描、双向扫描(single-direction scanning, bidirectional scanning of Quick Sort)
议题:快速排序实现之一(单向遍历) 分析: 算法原理:主要由两部分组成,一部分是递归部分QuickSort,它将调用partition进行划分,并取得划分元素P,然后分别对P之前的部分和P 之后的部分 ...
- 笔试算法题(33):烙饼排序问题 & N!阶乘十进制末尾0的个数二进制最低1的位置
出题:不同大小烙饼的排序问题:对于N块大小不一的烙饼,上下累在一起,由于一只手托着所有的饼,所以仅有一只手可以翻转饼(假设手足够大可以翻转任意块数的 饼),规定所有的大饼都出现在小饼的下面则说明已经排 ...
- php笔试算法题:顺时针打印矩阵坐标-蛇形算法
这几天参加面试,本来笔试比较简单,但是在面试的时候,技术面试官说让我现场写一个算法,顺时针打印矩阵的坐标,如图所示 顺序为,0,1,2,3,4,9,14,19,24,23,22,21,20,15,10 ...
- 笔试算法题(43):布隆过滤器(Bloom Filter)
议题:布隆过滤器(Bloom Filter) 分析: BF由一个很长的二进制向量和一系列随机映射的函数组成,通过多个Hash函数将一个元素映射到一个Bit Array中的多个点,查询的时候仅当所有的映 ...
- 笔试算法题(58):二分查找树性能分析(Binary Search Tree Performance Analysis)
议题:二分查找树性能分析(Binary Search Tree Performance Analysis) 分析: 二叉搜索树(Binary Search Tree,BST)是一颗典型的二叉树,同时任 ...
- 笔试算法题(57):基于堆的优先级队列实现和性能分析(Priority Queue based on Heap)
议题:基于堆的优先级队列(最大堆实现) 分析: 堆有序(Heap-Ordered):每个节点的键值大于等于该节点的所有孩子节点中的键值(如果有的话),而堆数据结构的所有节点都按照完全有序二叉树 排.当 ...
- 笔试算法题(56):快速排序实现之非递归实现,最小k值选择(non-recursive version, Minimal Kth Selection of Quick Sort)
议题:快速排序实现之五(非递归实现,短序列优先处理,减少递归栈大小) 分析: 算法原理:此算法实现适用于系统栈空间不足够快速排序递归调用的需求,从而使用非递归实现快速排序算法:使用显示下推栈存储快速排 ...
随机推荐
- 关于solr云相关知识
1.认识系统架构 1.1.集群概述 1.1.1.单点服务器的问题 我们之所以要学习集群,是因为单点服务器,存在一系列的问题. 我们以前学习的JavaEE项目,都是部署在一台Tomcat上,所有的请求, ...
- linuxmint安装卡在探测文件系统,解决方法。
今天安装linuxmint17.3,一直卡在探测文件... 解决方法如下: 执行安装程序前,打开终端执行如下命令即可. sudo umount -l /isodevic
- bzoj 4540: [Hnoi2016]序列【单调栈+线段树】
强烈安利:http://blog.csdn.net/qq_34637390/article/details/51313126 这篇讲标记讲的非常好,这个标记非常神奇-- 首先last表示扫描到last ...
- YCOJ中国邮递员问题
题目: Description 一个邮递员从邮局出发,需要去 n - 2个城市送信,送完信件以后回家. 邮局在城市 1,家在城市 n,任意两个城市之间都有道路,但是这些道路是单向,也就是说 a 到 b ...
- Manven下载
1.下载地址:http://maven.apache.org/download.cgi 2.点击下载链接 3.解压zip到安装路径 我的:C:\Progr ...
- jquery中document.ready在两类浏览器中的区别[转]
DOMready的构建方法不再重复,现代浏览器通过DOMContentLoaded来实现,IE通过readystatechange+doScroll来模拟该方法. 类似jquery中的document ...
- [转]广义正交匹配追踪(gOMP)
广义正交匹配追踪(Generalized OMP, gOMP)算法可以看作为OMP算法的一种推广,由文献[1]提出,第1作者本硕为哈工大毕业,发表此论文时在Korea University攻读博士学位 ...
- BZOJ2553 [BJWC2011]禁忌
传送门 Description 给你前alphabet个小写字母组成的字符集, 以及n个单词, 定义一个串s的禁忌值为 \(\sum_{i } [s[i] == Taboo[i]]\) , Tab ...
- treap板子(洛谷 P3369 【模板】普通平衡树(Treap/SBT))
由于有相同的数,每个节点加一个权值表示此数出现的次数 #include<cstdio> #include<cstdlib> #include<ctime> #inc ...
- 【转】【开源下载】基于TCP网络通信的即时聊天系统(IM系统)(c#源码)
原文链接 强烈关注,学习!