笔试算法题(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)
议题:快速排序实现之五(非递归实现,短序列优先处理,减少递归栈大小) 分析: 算法原理:此算法实现适用于系统栈空间不足够快速排序递归调用的需求,从而使用非递归实现快速排序算法:使用显示下推栈存储快速排 ...
随机推荐
- ObjectInputStream与ObjectOutputStream类实现对象的存取
1. ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 ...
- package-lock.json到底是干嘛的?(转载)
package-lock.json到底是干嘛的? https://mp.weixin.qq.com/s/NaVVljKrQAFmHMdbkaYmPg## nvm-windows https://git ...
- 无线 WIFI 的13个信道频率范围(转载)
转自:http://cnzhx.net/blog/13-channels-of-wifi/ 目前主流的无线WIFI网络设备不管是802.11b/g还是802.11b/g/n 一般都支持13个信道.它们 ...
- 机器学习--DIY笔记与感悟--①K-临近算法
##“计算机出身要紧跟潮流” 机器学习作为如今发展的趋势需要被我们所掌握.而今我也需要开始learn机器学习,并将之后的所作所想记录在此. 今天我开始第一课--K临近算法. 一.k-临近的基础概念理解 ...
- ThinkPHP3.2.3学习笔记1---控制器
ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布.ThinkPHP从诞生以来一 ...
- 使用gitee(码云)创建项目
注册登录 https://gitee.com/ 也可以直接用oschina的帐号. 创建项目 点击"+"号,创建项目. 执行git命令 本机创建一个你的这个项目目录,init后不要 ...
- POJ 1686 Lazy Math Instructor(栈)
原题目网址:http://poj.org/problem?id=1686 题目中文翻译: Description 数学教师懒得在考卷中给一个问题评分,因为这个问题中,学生会为所问的问题提出一个复杂的公 ...
- [Usaco2017 Feb]Why Did the Cow Cross the Road II (Gold)
Description 上下有两个长度为n.位置对应的序列A.B, 其中数的范围均为1~n.若abs(A[i]-B[j])<= 4,则A[i]与B[j]间可以连一条边. 现要求在边与边不相交的情 ...
- 51nod1127 最短的包含字符串 尺取法
Bryce1010模板 #include <bits/stdc++.h> using namespace std; typedef long long LL; map<char,LL ...
- Bryce1010的微机接口课设
8086CPU知识回顾 8086 CPU 中寄存器总共为 14 个,且均为 16 位 . 即 AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个. 而 ...