版权声明:版权归原作者所有。未经允许,严禁转载。 https://blog.csdn.net/luccao/article/details/82425606
1. 二分查找
二分查找也是比较经典的面试题
条件:
1)数据是按从小到大或者是从大到小排序的
2)给定一组数据,在所给的排序数据中找出与数据相等的值,并返回它的下标
例子代码:
#include <iostream>
using namespace std;
int binary_search(int *a, int num, int value);
/*二分查找函数*/
int binary_search(int *a, int num, int value)
{
int start = 0;
int end = num - 1;
while(start <= end)
{
int mid = start + ((end - start) >> 1);
if(a[mid] < value)
{
start = mid + 1
}
else if(a[mid] > value)
{
end = mid - 1;
}
else
{
return mid;
}
}
return -1;
}
/*主函数*/
int main(int argc, char **argv)
{
int a[] = {1,2,3,4,5};
int num = 5;
int value = 3;
int index = binary_search(a, num, value);
printf("index = %d\n", index);
}
2. 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点, 只调整指针的指向
解题思路:
当我们到达某一结点准备调整以该结点为根结点的子树时,先调整其左子树将左子树转换成一个排好序的左子链表,再调整其右子树转换右子链表。最近链接左子链表的最右结点(左子树的最大结点)、当前结点和右子链表的最左结点(右子树的最小结点)。从树的根结点开始递归调整所有结点。
步骤:
1)创建二元查找树
2)将二元查找树转换成双向链表
3)遍历二元查找树
/*定义二元查找树节点结构*/
typedef struct _BSTreeNode{
int data;
struct _BSTreeNode *left;
struct _BSTreeNode *right;
}BSTreeNode;
/*转换子二叉查找树变成排序双向链表*/
BSTreeNode* ConvertNode(BSTreeNode *pNode, bool asRight)
{
if(pNode == NUll)
{
return;
}
//左子树链表
BSTreeNode *pleft = NULL;
//右子树链表
BSTreeNode *pright = NULL;
//1. 返回左子链表的最大值给当前node
if(pNode->left)
{
pleft = ConvertNode(pNode->left, false);
}
if(pleft)
{
pleft->right = pNode;
pNode->left = pleft;
}
//2. 返回右子链表的最小值给当前node
if(pNode->right)
{
pright = ConvertNode(pNode->right, true);
}
if(pright)
{
pright->left = pNode;
pNode->right = pright;
}
BSTreeNode *p_temp = pNode;
if(asRight)
{
while(p_temp->left)
{
p_temp = p_temp->left;
}
}
else
{
while(p_temp->right)
{
p_temp = p_temp->right;
}
}
return p_temp;
}
/*转换二叉查找树变成排序双向链表*/
BSTreeNode* Convert(BSTreeNode *p_headoftree)
{
return ConvertNode(p_headoftree, true);
}
3. 定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。要求函数 min、push 以及 pop的时间复杂度都是O(1)。
思路:
1. 什么是栈?
2. 回想一下栈的结构,然后再看看题目,似乎觉得还是很有难度。
经过一番苦想,思路可以是一下这种:
#include <deque>
#include <assert.h>
#include <iostream>
using namespace std;
template <typename T>
class CStackWithMin
{
}