48天笔试强训——第19天

106 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情


选择题

image.png

二分查找又叫折半查找,时间复杂度为O(logn)

image.png

对于单链表的插入操作,要注意节点的链接,先是rnext指向B,然后'p'的next指向s image.png

image.png

假如我们释放p所指的二号节点 操作流程:1号节点的右指针指向3号节点,3号节点的左指针指向1号节点。这两个步骤可以交换。 image.png

image.png

栈的性质是先进后出。如果D先出,那么ABC都已经在栈中了,因此A出栈的时候,B早已经出栈了,所以C错误。

image.png

队列的性质是先进先出,后进后出。 根据题目的描述,循环队列添加元素,end2往后移动一位,,当删除一个元素的时候,end1往后移动1位。队列中的元素就是end1往后一直到end2之间。所以当队列为空的时候,end1==end2,当队满的时候,end2一定是最后一个,它加1,一定等于队头end1,由于是循环队列,要模上M,即end1==(end2+1)%M

image.png

后序遍历确定根,中序遍历可以根据根确定左右孩子。理解这句话就可以做出来

image.png

在二叉树中,叶子节点的数目==度为2的节点个数+1

image.png

堆有两种,1.大根堆,2.小根堆。大根堆就是,根大于孩子节点;小根堆,根小于孩子节点。

image.png

把每个值对应的关键码求出即可,求关键码就是用那个哈希函数。地址为1的有14,1,27,79

image.png

所谓的不稳定就是指,相同数的相对位置在排序的过程中会发生变化。快速排序是不稳定的排序。

编程题

汽水瓶

本道题目还是简单的,主要是注意题目有一个细节就是可以向老板借个空瓶子。 我们来模拟它用空瓶子来换水的过程,每个空瓶子可以换1瓶汽水,那意思就是2个空瓶子就可以喝到1瓶水,

#include <iostream>
using namespace std;

int main() {
    int n;
    cin>>n;
    while(n)
    {   
        int ret=0;
        while(n){
            n-=2;
            ret++;
        }
        cout<<ret<<endl;
        cin>>n;
    }
}

查找两个字符串a,b中的最长公共子串

本道题目考查的是动态规划的知识,f[i][j]表示stra以i位置的字符结尾,stra以j位置结尾的字符的最大公共字符串的最大值,状态方程的计算:我们以stra[i]是否和strb[j]相等作为分割边界,如果stra[i]==strb[j],f[i][j]=f[i-1][j-1]+1,如果不相等,f[i][j]=0. 注意题目的要求是返回的公共的子串,而且要输出的较短的那个,所以我们开始要比较字符串的长度,保证以stra为短的字符串。还有我们的f表示的最大值,所以我们要记录最大最大值,以及遍历它们的时候最大值的下标,i,j。