笔试算法题(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)
议题:快速排序实现之五(非递归实现,短序列优先处理,减少递归栈大小) 分析: 算法原理:此算法实现适用于系统栈空间不足够快速排序递归调用的需求,从而使用非递归实现快速排序算法:使用显示下推栈存储快速排 ...
随机推荐
- linuxmint17.3提示flash不是最新版本解决方法(copy)
[资料来自于:http://blog.csdn.net/kh896424665/article/details/54879608] 问题:播放视频提示:Adobe Flash Player 不是最新版 ...
- [App Store Connect帮助]七、在 App Store 上发行(2.1)设定价格与销售范围:为您的 App 设定价格
在您提交 App 以供审核之前,您必须为您的 App 设定一个价格,该价格将用于 App Store 的所有地区.如果您没有<付费应用程序协议>,则只能选择免费. 必要职能:“帐户持有人” ...
- js实现打字效果
<!DOCTYPE html> <html> <head> <meta charset='utf-8'> <title>js typing& ...
- 自己动手利用CentOS6.5 搭建php环境安装discuz论坛
1.安装搭建论坛必要的软件 apache php mysql CentOS系统我们可以直接使用 yum install 的方式进行软件安装,腾讯云有提供软件安装源,是同步CentOS官方的安装源,包涵 ...
- 《windows核心编程系列》二十一谈谈基址重定位和模块绑定
每个DLL和可执行文件都有一个首选基地址.它表示该模块被映射到进程地址空间时最佳的内存地址.在构建可执行文件时,默认情况下链接器会将它的首选基地址设为0x400000.对于DLL来说,链接器会将它的首 ...
- pycharm2017.1破解方法
破解专业版,在server选项里边输入 http://elporfirio.com:1017/就可以了
- BP神经网络算法改进
周志华机器学习BP改进 试设计一个算法,能通过动态调整学习率显著提升收敛速度,编程实现该算法,并选择两个UCI数据集与标准的BP算法进行实验比较. 1.方法设计 传统的BP算法改进主要有两类: - 启 ...
- 51nod 1126 求递推序列的第N项
1126 求递推序列的第N项 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 有一个序列是这样定义的:f(1) = 1, f(2) = 1, f( ...
- 洛谷 P1288 取数游戏II
奇奇怪怪的游戏,不多写了 #include<cstdio> ]; int main() { int i; scanf("%d",&n); ;i<=n;i+ ...
- 题解报告:hdu 1541 Stars(经典BIT)
Problem Description Astronomers often examine star maps where stars are represented by points on a p ...