【C++复习】经典笔试题

c++笔试题汇总 今天去9City笔试才发现很多基本的东西都忘记了,以后面试前要看看这篇文章了!唉,老了!①链表反转单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用 阅读详情

八大排序

插冒归稳定

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

快排过程

以 [3,4,6,1,2,4,7] 为例,以第一个元素3为base,定义左右两个指针(小熊l,小熊r),分别从两端开始扫描。从右向左找比3小的数,替换l所在位置的元素。再从左往右找比3大的数,然后替换r所在位置的元素。重复此过程直至两个小熊重合(两个指针指向同一元素),base替换此元素,此时第一轮结束。再递归排序base左右两部分的元素。

卡特兰数

在这里插入图片描述

C0 = 1,         
C1 = 1,         C2 = 2,          C3 = 5,          C4 = 14,          C5 = 42,
C6 = 132,       C7 = 429,        C8 = 1430,       C9 = 4862,        C10 = 16796,
C11 = 58786,    C12 = 208012,    C13 = 742900,    C14 = 2674440,    C15 = 9694845,
C16 = 35357670, C17 = 129644790, C18 = 477638700, C19 = 1767263190, C20 = 6564120420, ...

反转链表

💡 采用翻指针法,将每个节点的next指针翻转一下,让其指向前一个节点即可

struct ListNode* ReverseList(struct ListNode* head )
{
   
   
    struct ListNode* prev=NULL;//prev指针初始为为NULL,考虑链表本身为空的情况
    struct ListNode* cur=head;
    while(cur)
    {
   
   
        struct ListNode* next=cur->next;//先保存下一个节点,防止下面翻指针过程中丢失next节点
        cur->next=prev;
        prev=cur;
        cur=next;
    }
    return prev;//prev最终指向原链表最后一个节点,即翻转后的第一个节点
}

💡 头插法,遍历原链表每个节点,将其头插到初始为NULL的新链表上即可

struct ListNode* ReverseList(struct ListNode* head )
{
   
   
    struct ListNode* cur=NULL;//cur指针初始化为NULL,考虑链表本身为空的情况
    while(head)
    {
   
   
        struct ListNode* next=head->next;//先保存下一个节点,防止下面翻指针过程中丢失next节点
        //头插
        head->next=cur;
        cur=head;
        head=next;
    }
    return cur;//cur最终指向原链表最后一个节点,即翻转后的第一个节点
}

💡 递归法,先递归到最后链表的最后一个节点处,然后在回退的时候进行翻指针

struct ListNode* ReverseList(struct ListNode* head ) 
{
   
   
    if(head==NULL||head->next==NULL)
    {
   
    
        return head; 
    }
    struct ListNode* cur = ReverseList(head->next);// 这里的cur就是最后一个节点
    head->next->next = head;
    // 防止链表循环,需要将head.next设置为空
    head->next = NULL;
    // 每层递归函数都返回cur,也就是最后一个节点
    return cur;//这里就是将最后一个节点不断返回回去
}

💡 三指针法,就是用三个指针定位三个节点,做到翻指针的效果

struct ListNode *ReverseList(struct ListNode *head)
{
   
   
    if (head == NULL)
    {
   
   
        return NULL;
    }
    struct ListNode *prv = NULL, *cur = head, *nxt = cur->next;
    while (cur)
    {
   
   
        cur->next = prv;
        prv = cur;
        cur = nxt;

        if (nxt)
            nxt = nxt->next;
    }
    return prv;
}

链表的回文结构

  1. 先通过快慢指针的方式,找到链表中间节点。
  2. 再将后半部分链表进行反转。
  3. 最后将链表前半部分和反转后的后半部分链表逐节点进行比较判断。
class PalindromeList {
   
   
  public:
    bool chkPalindrome(ListNode* A) {
   
   
        if (A == nullptr || A->next == nullptr)
            return true;

        ListNode* slow, *fast;
        slow = fast = A;
        while (fast && fast->next) {
   
   
            slow = slow->next;
            fast = fast->next->next;
        }

        ListNode* prev, *cur, *nxt;
        prev = nullptr;
        cur = slow;
        while (cur) {
   
   
            nxt = cur->next;
            cur->next = prev;
            prev = cur;
            cur = nxt;
        }

        while (A && prev) {
   
   
            if (A->val != prev->val)
                return false;
            
            A = A->next;
            prev = prev->next;
        }
        return true;
    }

};

左叶子之和

左叶子之和_牛客题霸_牛客网 (nowcoder.com)

class Solution {
   
   
  public:
    void _helper(TreeNode* root, int& sum) {
   
   
        if (root == nullptr)
            return;
        if (root->left && !root->left->left && !root->left->right)
            sum += root->left->val;
            
        _helper(root->left, sum);
        _helper(root->right, sum);
    }
    int sumOfLeftLeaves(TreeNode* root) {
   
   
        int sum = 0;
        _helper(root, sum);
        return sum;
    }
};

另一棵树的子树

572. 另一棵树的子树 - 力扣(LeetCode)

class Solution {
   
   
public:
    bool isSubtree(TreeNode* s, TreeNode* t) {
   
   
        if (!s && !t)
            return true;

        // 代码走到这里 已经保证s t不全空
        if (!s || !t)
            return false;

        return isSameTree(s, t) || isSubtree(s->left, t) ||
               isSubtree(s->right, t);
    }

    bool isSameTree(TreeNode* s, TreeNode* t) {
   
   
        if (!s && !t)
            return true; 
        if (!s || !t)
            return false; 
        return (s->val == t->val) && isSameTree(s->left, t->left) &&
               isSameTree(s->right, t->right);
    }
};

归并排序

递归

#include <iostream>
#include <vector>

void merge(std::vector<int>& arr, int left, int mid, int right) {
   
   
    std::vector<int> leftArr(arr.begin() + left, arr.begin() + mid + 1);
    std::vector<int> rightArr(arr.begin() + mid + 1, arr.begin() + right + 1);

    int i = 0, j = 
12道C++经典笔试题及答案(2022) 这里整理了12道C++经常遇到的笔试题以及答案 阅读详情

相关推荐

C++笔试题整理

目录 1. 笔试题1 1.1 链表反转 1.2 String 2. 笔试题2 2.1 求下面函数的返回值(微软) 2.2 什么是“引用”?申明和使用“引用”要注意哪些问题? 2.3 将“引用”作为函数参数有哪些特点? 2.4 在什么时候需要使用“常引用”?  2.5 将“引用”作为函数返回值类型的格式、好处和需要遵守的规则? 2.6 “引用”与多态的关系? 2.7 “引用”与指针的区别是什么? 2.8 什么时候需要“引用”? 2.9 结构与联合有和区别? 2.10 下面关于.

星月相随的专栏 2475

C++核心语法与内存管理精讲:从变量、指针到实战避坑指南

在编程语言中,变量、数据类型和运算符是构建程序逻辑的基础单元,它们定义了数据的存储、表示和运算方式。其原理在于编译器根据类型信息分配内存空间,并通过运算符指令在CPU上执行计算。掌握这些基础对于理解程序运行机制、编写高效可靠的代码至关重要,尤其在系统编程和性能敏感场景中。指针和引用作为C++的核心特性,提供了直接操作内存地址的能力,是实现数据结构、资源管理和底层优化的关键技术。然而,指针误用(如空指针解引用、悬垂指针)和内存管理不当(如内存泄漏、数组越界)是导致程序崩溃和安全漏洞的常见原因。本文以C++期末

weixin_33910385的博客 326

C++编程:笔试题实战与技巧全解

本文还有配套的精品资源,点击获取 简介:本书为2007至2008年IT企业C++笔试题汇编,旨在帮助读者深入掌握C++核心概念、语法和应用技巧。内容涵盖了类、对象、继承、多态、内存管理、指针与引用、STL容器与算法、异常处理、模板元编程、C++标准库、多线程与并发、设计模式以及面试实践技巧。通过学习这些关键知识点,读者将提升编程能力,并为面试和项目开发做好准备。 1....

weixin_33431149的博客 1019

C++笔试题库与实战解析-含完整答案

在C++中,变量定义与数据类型的使用是构建程序逻辑的基础。理解数据类型的取值范围、const与volatile的语义差异,以及变量作用域与生命周期的控制,是掌握语言基础的关键。特性set元素唯一性是元素排序是(升序)是否允许修改否底层实现红黑树本章系统地分析了 STL 容器、迭代器与算法、以及内存管理在笔试中常见的题型与陷阱。通过对vectorlistmapset。

weixin_35797963的博客 1235

C++笔试题汇总(含答案与分析)

这是本人亲自总结的C++笔试题汇总,参考了网络很多C++笔试题(包括各大IT公司,游戏公司),挑选出了一些经典的题和难题做解析。 作用:对工作面试笔试和C++水平提高很有用处 内容:C++,STL等;

C++笔试题(很全的)

很辛苦的找到的,比较全 表示已有答案 表示没有处理 表示答案不确定 C++笔试题 1.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的? 答案:虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.而对象的隐藏成员--虚拟函数表指针是在运行期--也就是构造函数被调用时进行初始化的,这是实现多态的关键.

C++笔试题附带答案

1、 什么是类和对象? 2、 成员函数通过什么来区分不同对象的成员数据,为什么它能够区分? 3、 拷贝构造函数在哪几种情况下会被调用? 4、 什么时候必须重写拷贝构造函数? 5、 如果定义一个类的对象,该类是一个派生类,并且类中有成员对象时,该对象的构造过程是怎样的? 6、 哪几种情况必须用到初始化成员列表?

C++笔试题(附答案),有难度

欧美某著名浏览器公司的C++笔试题,很有挑战性!

C/C++经典笔试题汇总

C/C++经典笔试题汇总,很全,很好,很强大,只要你有耐心看完

MT6771 Android13 背光曲线调试与光感数据校准实战

本文详细介绍了MT6771平台在Android 13系统上进行背光曲线调试与光感数据校准的实战经验。针对高亮度环境下背光误调节问题,深入分析了光感数据上报机制,并提供了驱动层配置修改、背光曲线优化及常见问题解决方案,帮助开发者快速定位并解决类似问题。

moon9的博客 282

使用qt+PaddleOCR做一个OCR软件demo

文章目录使用qt+PaddleOCR做一个OCR软件demo效果展示1 建立环境1.1 vs项目环境1.2 qtcreator项目环境1.2.1 源代码整理1.2.2 依赖项整理如下1.2.3 模型文件如下1.2.4 在.pro文件中设置依赖库的模式1.2.5 pro文件中添加.h和.lib2 在工程代码中添加截图功能2.1 新建截图类并连接信号2.2 QImage转cv::Mat3 在工程代码中集成PaddleOCR3.1 初始化PaddleOCR3.2 修改文字识别类的run函数,增加一个返回结果的值的

ShareProgress的博客 9296

避坑指南:PVE下N卡直通错误代码43的终极解决思路与dmesg日志分析

本文详细解析了PVE环境下NVIDIA显卡直通时遇到的错误代码43问题,提供了从dmesg日志分析到BIOS配置、PVE宿主机优化及虚拟机设置的完整解决方案。特别针对GTX1060等显卡,分享了驱动版本选择、ROM修补及高级排错技巧,帮助用户彻底解决这一常见难题。

weixin_28693683的博客 279

matlab生成blocks、bumps和doppler标准测试信号

关键函数:wnoise使用方式X = wnoise(FUN,N) [X,XN] = wnoise(FUN,N,SQRT_SNR) [X,XN] = wnoise(FUN,N,SQRT_SNR,INIT)X = wnoise(FUN,N) 返回由 FUN给出的信号,长度为2^N,幅值范围[0,1].[X,XN] = wnoise(FUN,N,SQRT_SNR) ,返回了一个测试信号X,以及一个加噪

ZSZ_shsf的博客 6577

EMC诊断技术及电磁兼容理论设计

本文深入探讨了EMC诊断技术,重点在于滤波篇,详细讲解了EMI滤波器的设计、选型、测试及应用注意事项。内容涵盖噪声限值法规、滤波器的法规依据、插入损耗测试以及滤波电容的高频特性。同时,还阐述了噪声源的近场与远场特性,如何快速定位和抑制噪声。通过实例分析,提供了滤波器件和辐射噪声抑制器件的选型策略。

让你爱上电路设计 2154

【AI智能体】Hermes Agent 从部署到项目实战操作详解

Hermes Agent 桌面版从安装到实战操作详解

congge 5103

第三篇:NVIDIA cuOpt Python API 详解:LP、QP、MILP 建模与求解,附核心术语名词解释

NVIDIA cuOpt是一款GPU加速的优化求解库,支持LP、QP、MILP和路径优化问题。本文详细介绍了其Python API使用方法,包括核心类Problem的变量定义、约束添加、目标设置和求解配置,并提供了术语解释。cuOpt通过GPU并行计算大幅提升大规模优化问题的求解效率,支持多种求解算法和参数配置,适用于需要高性能计算的优化场景。安装方式包含pip和Docker两种,验证安装后即可快速开始建模求解。

算法工程师 230

新手福利!大龙虾OpenClaw可视化管理工具来了!告别命令行,这个可视化工具让OpenClaw管理变得超简单

还在用命令行管理OpenClaw?🚀 这个跨平台可视化工具支持14+AI模型,一键切换,还能对接微信飞书钉钉等8大消息渠道,让AI助手管理变得简单直观 ✅ 暗色主题护眼舒适,Rust后端高性能低占用,新手也能轻松上手 🎯

XiaoqiangClub的博客 750

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 【算法-动态规划】打家劫舍专题
下一篇: 【C++复习】Map Set HashMap HashSet的模拟实现{代码分享}
阿猿收手吧!
阿猿收手吧! 优质创作者: C/C++技术领域 优质创作者: C/C++技术领域
博客等级 码龄4年 7249粉丝 536原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿猿收手吧!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值