剑指offer-学习笔记

简介: 前言:18/06/06开始学习,每个程序都会用C写一遍,因书中用C++举例,也会换种思路写,供学习和参考!!!很推荐这本书很不错,准备入手,一般不买实体书,都用电子书,因一般都看一遍,但这本会看很多遍!无论刚毕业,还是跳槽都可以看一下.

前言:18/06/06开始学习,每个程序都会用C写一遍,因书中用C++举例,也会换种思路写,供学习和参考!!!很推荐这本书很不错,准备入手,一般不买实体书,都用电子书,因一般都看一遍,但这本会看很多遍!无论刚毕业,还是跳槽都可以看一下...

面试题3:二维数组中的查找

题目如图,所有题目截图均引自《剑指offer》,接下来不再说明!

书中从右上角开始查找,我的程序从左下角查找:

#include<stdio.h>
#include<stdbool.h>

bool Find(int (*num)[4],int rows,int column,int number)
{
    bool found = false;
    if(num!=NULL && rows>0 && column>0)
    {   
        int col = 0;
        int row = rows-1;
        while(col<column && row>=0)
        {   
            if((*num)[row*column+col] == number)
            {   
                found = true;
                break;
            }   
            if((*num)[row*column+col] < number)
                 ++col;
            else
                --row;    
        }   
    }   
    return found;
}
int main()
{
    int number;
    int num[4][4] = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
    puts("please input your number:");
    scanf("%d",&number);
    bool res = false;
    res = Find(num,4,4,number);
    printf("res:%d\n",res);
    return 0;
}

对逻辑不理解的,可以随时留言,随时解答!!!

面试题4:

代码如下:

#include<stdio.h>

void ReplaceBlank(char string[],int length)
{
    if(string==NULL && length<=0)
        return;
    int originalLen = 0;//字符串实际长度
    int numBlank=0,i=0;
    while(string[i] != '\0')
    {
        ++originalLen;
        if(string[i] == ' ')
           ++numBlank;
        ++i;
    }

    //替换后的长度
    int newLen = originalLen + numBlank*2;
    if(newLen > length)
        return;

    int indexLen = originalLen;
    int indexOfNew = newLen;
    while(indexLen>=0 && indexOfNew>indexLen)
    {   
        if(string[indexLen] == ' ')
        {   
            string[indexOfNew--]='0';
            string[indexOfNew--]='2';
            string[indexOfNew--]='%';
        }
        else
        {
            string[indexOfNew--] = string[indexLen];
        }
        --indexLen;
    }
}

int main()
{
    char buf[]={"hello world!"};
    ReplaceBlank(buf,20);
    printf("buf:%s\n",buf);
    return 0;
}

注:重点理解从尾到头遍历的时间复杂度为O(n)!!!

面试题5:

#include<stdio.h>
#include<stdlib.h>

typedef int data_t;
//栈结构
typedef struct LIFO
{
    int *data;  // 4字节的指针 指向数组(后分配的数组)
    int maxlen;    // 存储数据的个数最大值
    int top;
}seqstack_t;

//链表结构
typedef struct node{
    int data;
    struct node *next;
}linknode_t,* linklist_t;

//创建空的链表
linknode_t *CreateLink()
{
    linknode_t *H;
    H = (linklist_t)malloc(sizeof(linknode_t));
    H->next = NULL;
    return H;
}

//初始化一个空链表
void InitLink(linknode_t *H)
{
    linknode_t *r,*p;//r指向队尾
    r = H;
    int i=0;
    for(;i<5;i++)
    {
            p = (linklist_t)malloc(sizeof(linknode_t));
            p->data = i+1;
            p->next = NULL;
            r->next = p;
            r = p;//再将r指向队尾
    }
}

//打印所有节点
linknode_t * ShowLink(linknode_t *H,seqstack_t *T)
{
    linknode_t *p,*r;
    int temp=0;
    p = H->next;
    while(p != NULL)
    {
            T->data[T->top]=p->data;
            p = p->next;
            T->top++;
    }
    --T->top;    
    while(T->top>=0)
    {
            printf("data:%-5d",T->data[T->top]);
            T->top--;
    }
}

//清空链表
void ClearLink(linknode_t *H)
{
    linknode_t *p,*q;//p是删除的节点,q记录下一个要删除的节点
    q = H->next;
    while(q != NULL)
    {
            p = q;
            q = p->next;
            free(p);
    }
    printf("\n");
    H->next = NULL;
}

seqstack_t *  CreateStack(int max)
{
    seqstack_t *H;   // 分配结构体空间 --> 一个栈
    H = (seqstack_t *)malloc(sizeof(seqstack_t));     
    H->data = (data_t *)malloc(sizeof(data_t) * max);// 结构体成员赋值
    H->maxlen = max;
    H->top = 0;  
    return H;
}

int main()
{
    seqstack_t *T=CreateStack(10); // 获取一个空的栈
    linknode_t *H=CreateLink();
    InitLink(H);
    ShowLink(H,T);
    ClearLink(H);
    free(H);

    return 0;
}

注:用栈的后进先出LIFO思想实现链表的从尾到头的输出!!!

未完待续......

 

作者: 柳德维

-------------------------------------------

个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ⁾⁾!

目录
相关文章
【知识分享】Java获取当前日期是第几周且本周是几号到几号
【知识分享】Java获取当前日期是第几周且本周是几号到几号
367 0
|
机器学习/深度学习 数据可视化 TensorFlow
TensorFlow的可视化工具:TensorBoard的使用
【4月更文挑战第17天】TensorBoard是TensorFlow的官方可视化工具,用于展示和分析模型训练过程、结构和数据。它包括标量、图像、音频、模型图和直方图等多种可视化功能。通过`tf.summary`记录数据,使用`tensorboard --logdir`启动。高级功能包括自定义仪表板、嵌入和插件,助力深度学习的调试与优化。
带你读《5G NR标准:下一代无线通信技术》之一:5G概述
本书对NR标准进行了描述。NR标准是在2018年春末由3GPP制定的新一代无线接入技术标准。本书内容比较偏底层,阅读时结合协议去读会有更大的收获,而且全书深入浅出的风格非常好,可以使读者读后知其然又知其所以然!
|
7月前
|
调度 决策智能 知识图谱
腾讯云大模型知识引擎驱动 DeepSeek 满血版能源革命大模型:架构、优势与产业变革
腾讯云大模型知识引擎驱动的DeepSeek满血版能源革命大模型,融合了超大规模知识、极致计算效能和深度行业理解,具备智能预测、优化调度、设备健康管理和能源安全预警等七大功能模块。该模型通过分布式计算和多模态融合,提供精准的能源市场分析与决策支持,广泛应用于智慧风电场管理、油气田开发、能源市场交易等十大场景,助力能源行业的数字化转型与可持续发展。
|
12月前
|
机器学习/深度学习 人工智能 自动驾驶
AI技术在现代生活中的应用:从理论到实践
AI技术在现代生活中的应用:从理论到实践
865 2
|
12月前
|
缓存 负载均衡 API
抖音抖店API请求获取宝贝详情数据、原价、销量、主图等参数可支持高并发调用接入演示
这是一个使用Python编写的示例代码,用于从抖音抖店API获取商品详情,包括原价、销量和主图等信息。示例展示了如何构建请求、处理响应及提取所需数据。针对高并发场景,建议采用缓存、限流、负载均衡、异步处理及代码优化等策略,以提升性能和稳定性。
|
11月前
|
存储 弹性计算 网络协议
深度对比阿里云服务器ECS通用型g7、g7a、g8i、g8y、g8ise和g8a性能对比
阿里云ECS通用型g7、g7a、g8i、g8y、g8ise和g8a云服务器性能对比,涵盖CPU、内存、网络、存储等多方面参数。这些实例适用于多种企业级应用场景,如数据库、Web应用、大数据处理等。
694 3
|
机器学习/深度学习 编解码 人工智能
阿里云可以免费试用的云服务器配置有哪些?最低1核2G最高4核16G
阿里云为个人和企业用户提供“免费试用 0门槛上云”云服务器免费试用活动(二选一),帮您0门槛轻松体验3个月,可免费试用云服务器最低配置为1核2G,最高配置为4核16G,还有2核4G、2核8G等热门配置,个人用户可免费试用1台,企业用户可免费试用2台,现在只需要注册认证即可免费申请试用。
1123 1
阿里云可以免费试用的云服务器配置有哪些?最低1核2G最高4核16G
|
12月前
|
机器学习/深度学习 人工智能 算法
基于YOLOv8的河道漂浮物实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
基于YOLOv8的河道漂浮物实时检测系统,利用2400张图片训练有效模型,开发了带GUI界面的系统,支持图片、视频和摄像头检测,具备模型权重导入、检测置信度调节等功能,旨在维护水体生态平衡和环境卫生。
571 0
基于YOLOv8的河道漂浮物实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
|
12月前
|
存储 Oracle 关系型数据库
【数据库-DB2】深入了解DB2 reorg
本文介绍了DB2数据库中reorg操作的重要性,旨在通过重组表数据来消除数据碎片、压缩信息并提高数据访问速度。reorg操作能够根据索引关键字重新排序数据,减少查询I/O次数,提升查询性能。文章详细讲解了reorg的操作步骤、适用场景及注意事项,强调了在执行reorg前后更新统计信息的必要性。
603 2