摘要:
哈希表也叫做散列表。在各种语言中都有hashmap的实现。其最突出的优点是查找和插入以及删除具有常数的时间复杂度我们可以把哈希表理解为数组+链表数组具有常数复杂度的查找,为什么呢,因为数组是在内存中连续存放,当我们索引某个位置的元素时候根据索引值自动计算距离数组首元素起始位置的内存间隔。然而对于中间... 阅读全文
摘要:
题目一:写一个函数,输入n,求斐波拉契数列的第n项。斐波拉契数列的定义如下:1 { 0 n=0; 2 f(n)={ 1 n=1;3 { f(n-1)+f(n-2) ... 阅读全文
摘要:
题目:把一个数组最开始的若干个元素搬到数据的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。这道题可以使用类似于二分查找的思想,算法思路如下:1.假设有一个旋转数组A,我们设两... 阅读全文
摘要:
二分查找算法是一种快速的查找算法。当我们再一个数组中查找是否存在某个数时,通常是直接遍历这个数组直到找到这个数,时间复杂度为O(n)试想如果数据量很大,上亿呢,怎么办,这里我们可以用一种简单快速的的查找算法--二分查找算法也叫做折半查找算法。二分查找算法的算法思维:1.首先查找数组必须是有序的(假设... 阅读全文
摘要:
题目.用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead分别完成在对尾插入节点和在队头删除节点。该队列类模板如下: 1 template 2 class CQueue 3 { 4 public: 5 void appendTail(const... 阅读全文
摘要:
题目:输入某二叉树的前序遍历和中序遍历结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如图所示的二叉树并输出它的头结点。二叉树的定义如下:1 struct Bi... 阅读全文
摘要:
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。刚看到这道题的小伙伴可能就会想,这还不简单,将链表反转输出。但是这种情况破坏了链表的结构。如果面试官要求不破坏链表结构呢,这时候我们就想到了一种数据结构---栈 当我们从前往后遍历链表逐个压栈 然后遍历结束后再逐个出栈。首先我们先来用第一... 阅读全文
摘要:
题目:请实现一个函数,把字符串中的每个空格都替换成"%20"。例如输入"We are happy."则输出"We%20are%20happy."这道题一看到就能想到直接从前到后遍历字符串,当遇到空格时候先将空格后面的字符串中每个字符向后移动两个位置,然后再把空格及空格之后的两个字符替换为"%20"剑... 阅读全文