【每日刷题】Day36

【每日刷题】Day36

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 232. 用栈实现队列 - 力扣(LeetCode)

2. 2960. 统计已测试设备 - 力扣(LeetCode)

3. 1700. 无法吃午餐的学生数量 - 力扣(LeetCode)

1. 232. 用栈实现队列 - 力扣(LeetCode)

//栈和队列的巩固题。本题思路仅供参考。

typedef int STDataType;

//栈结构体

typedef struct Stack

{

    STDataType* arr;

    int top;

    int capacity;

    int flag;

}ST;


 

//初始化栈

void StackInit(ST* st)

{

    assert(st);

    st->arr = NULL;

    st->capacity = st->top = 0;

}


 

//释放栈

void StackRelease(ST* st)

{

    assert(st);

    free(st->arr);

    st->arr = NULL;

    st->capacity = st->top = 0;

    st->flag = -1;

}


 

//判空

bool StackEmpty(ST* st)

{

    assert(st);

    return st->top == 0;

}



 

//入栈

void StackPush(ST* st, STDataType x)

{

    assert(st);

    if (st->top == st->capacity)

    {

        int newcapacity = st->capacity == 0 ? 4 : 2 * st->capacity;

        STDataType* tmp = (STDataType*)realloc(st->arr,sizeof(STDataType) * newcapacity);

        if (tmp == NULL)

        {

            perror("realloc:");

            exit(-1);

        }

        st->arr = tmp;

        st->capacity = newcapacity;

    }

    st->arr[st->top] = x;

    st->top++;

}


 

//出栈

void StackPop(ST* st)

{

    assert(st);

    assert(st->top > 0);

    st->top--;

}



 

//栈顶

STDataType StackTop(ST* st)

{

    assert(st);

    assert(st->top > 0);

    return st->arr[st->top - 1];

}


 

typedef struct

{

    ST st1;

    ST st2;

} MyQueue;


 

//创建队列

MyQueue* myQueueCreate()

{

    MyQueue* qe = (MyQueue*)malloc(sizeof(MyQueue));

    StackInit(&(qe->st1));

    StackInit(&(qe->st2));

    qe->st1.flag = 1;

    return qe;

}

//入列

void myQueuePush(MyQueue* obj, int x)

{

    //空

    ST* Empty = &(obj->st1);

    //非空

    ST* NotEmpty = &(obj->st2);

    if(!StackEmpty(&(obj->st1)))

    {

        Empty = &(obj->st2);

        NotEmpty = &(obj->st1);

    }

    while(NotEmpty->top&&(obj->st1.flag == 0))

    {

        StackPush(Empty,StackTop(NotEmpty));

        StackPop(NotEmpty);

    }

    if(obj->st1.flag==0)

    {

        StackPush(Empty,x);

    }

    else

    {

        StackPush(NotEmpty,x);

    }

    obj->st1.flag = 1;

}

//出列

int myQueuePop(MyQueue* obj)

{

    ST* Empty = &(obj->st1);

    ST* NotEmpty = &(obj->st2);

    if(!StackEmpty(&(obj->st1)))

    {

        Empty = &(obj->st2);

        NotEmpty = &(obj->st1);

    }

    while(NotEmpty->top&&(obj->st1.flag == 1))

    {

        StackPush(Empty,StackTop(NotEmpty));

        StackPop(NotEmpty);

    }

    int ret = 0;

    if(obj->st1.flag)

    {

        ret = StackTop(Empty);

        StackPop(Empty);

    }

    else

    {

        ret = StackTop(NotEmpty);

        StackPop(NotEmpty);

    }

    obj->st1.flag = 0;

    return ret;

}

//列头元素

int myQueuePeek(MyQueue* obj)

{

    ST* Empty = &(obj->st1);

    ST* NotEmpty = &(obj->st2);

    if(!StackEmpty(&(obj->st1)))

    {

        Empty = &(obj->st2);

        NotEmpty = &(obj->st1);

    }

    while(NotEmpty->top&&(obj->st1.flag == 1))

    {

        StackPush(Empty,StackTop(NotEmpty));

        StackPop(NotEmpty);

    }

    int ret = 0;

    if(obj->st1.flag)

    {

        ret = StackTop(Empty);

    }

    else

    {

        ret = StackTop(NotEmpty);

    }

    obj->st1.flag = 0;

    return ret;

}

//判空

bool myQueueEmpty(MyQueue* obj)

{

    return StackEmpty(&(obj->st1))&&StackEmpty(&(obj->st2));

}

//释放队列

void myQueueFree(MyQueue* obj)

{

    StackRelease(&obj->st1);

    StackRelease(&obj->st2);

    free(obj);

    obj = NULL;

}

2. 2960. 统计已测试设备 - 力扣(LeetCode)

//思路:遍历数组。记录当前所有设备的电池需要降低的百分比,将当前元素大于需要降低的百分比时,需要降低的百分比++

int countTestedDevices(int* batteryPercentages, int batteryPercentagesSize)

{

    int count = 0;

    int i = 0;

    if(batteryPercentages[0]>=1)//判断数组中第一个元素是否为0,不为0则将所有设备的电池需要降低的百分比++,同时将i置为1,从数组第二个元素开始遍历

    {

        count++;

        i++;

    }

    for(;i<batteryPercentagesSize;i++)

    {

        if(batteryPercentages[i]>count)//如果当前元素>需要降低的百分比,需要降低的百分比++

        {

            count++;

        }

    }

    return count;

}

3. 1700. 无法吃午餐的学生数量 - 力扣(LeetCode)

//0ms  100%思路:队列。使用两个队列qe1和qe2分别存放students和sandwiches数组,随后比较两个队列的队头元素,如果相同,studentsSize--,否则,将qe1队列的队头元素先存储起来,随后将其删除,随后再将其存入队尾,实现该同学回到队尾。随后继续重复上述流程。注意:这里的队头元素比较为循环,因此需要一个标志来判断循环的结束与否,这里的思路是定义一个变量,该变量与qe1队列中的元素个数比较,该变量大于qe1队列中元素个数时,跳出循环。

//以下为队列的实现函数

typedef int QDataType;


 

//队列节点

typedef struct listnode

{

    QDataType val;

    struct listnode* next;

}LN;


 

//队列头尾指针

typedef struct Queque

{

    LN* phead;

    LN* ptail;

    int size;

}QE;


 

//队列初始化

void QueInit(QE* qe)

{

    assert(qe);

    qe->phead = NULL;

    qe->ptail = NULL;

    qe->size = 0;

}


 

//入列

void QuePush(QE* qe, QDataType x)

{

    assert(qe);

    LN* newnode = (LN*)malloc(sizeof(LN));

    if (newnode == NULL)

    {

        perror("malloc:");

        exit(-1);

    }

    newnode->next = NULL;

    newnode->val = x;

    if (qe->phead == NULL)

    {

        qe->phead = qe->ptail = newnode;

    }

    else

    {

        qe->ptail->next = newnode;

        qe->ptail = qe->ptail->next;

    }

    qe->size++;

}


 

//出列

void QuePop(QE* qe)

{

    assert(qe);

    assert(qe->phead != NULL);

    assert(qe->size > 0);

    LN* tmp = qe->phead->next;

    free(qe->phead);

    qe->phead = tmp;

    qe->size--;

}


 

//获取列头元素

QDataType QueGetHead(QE* qe)

{

    assert(qe);

    assert(qe->phead != NULL);

    return qe->phead->val;

}



 

//获取列尾元素

QDataType QueGetBack(QE* qe)

{

    assert(qe);

    assert(qe->ptail != NULL);

    return qe->ptail->val;

}



 

//获取队列元素个数

int QueSize(QE* qe)

{

    assert(qe);

    return qe->size;

}



 

//判断队列是否为空

bool QueEmpty(QE* qe)

{

    assert(qe);

    return qe->size == 0;

}


 

//释放队列

void QueRelease(QE* qe)

{

    assert(qe);

    while (qe->phead)

    {

        LN* tmp = qe->phead->next;

        free(qe->phead);

        qe->phead = tmp;

    }

    qe->ptail = NULL;

    qe->size = 0;

    free(qe);

    qe = NULL;

}

//以上为队列实现函数,下面直接调用接口函数


 

int countStudents(int* students, int studentsSize, int* sandwiches, int sandwichesSize)

{

    QE qe1;

    QE qe2;

    QueInit(&qe1);

    QueInit(&qe2);

    for(int i = 0;i<studentsSize;i++)//将students和sandwiches数组存入队列

    {

        QuePush(&qe1,students[i]);

        QuePush(&qe2,sandwiches[i]);

    }

    int count = studentsSize;//count为吃不上饭的学生人数,初始为学生总人数

    int flag = 0;//用于下面循环结束与否的判断条件

    while(flag<qe1.size)

    {

        if(QueGetHead(&qe1)==QueGetHead(&qe2))//如果当前学生遇到了喜欢的三明治,吃不上饭的学生(count)--,并将flag重新置为0

        {

            QuePop(&qe1);

            QuePop(&qe2);

            flag = 0;

            count--;

        }

        else//如果当前学生遇到的不是喜欢的三明治,将学生置于队尾,flag++

        {

            int tmp = QueGetHead(&qe1);

            QuePop(&qe1);

            QuePush(&qe1,tmp);

            flag++;

        }

    }

    return count;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/685675.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库调优-SQL语句优化

2. SQL语句优化 sql 复制代码 # 请问这两条SQL语句有什么区别呢&#xff1f;你来猜一猜那条SQL语句执行查询效果更好&#xff01; select id from sys_goods where goods_name华为 HUAWEI 麦芒7 魅海蓝 6G64G 全网通; ​ select id from sys_goods where goods_id14967325985…

IATF16949认证是什么?

IATF16949认证是一项国际质量管理体系的认证标准&#xff0c;由国际汽车行业联合会&#xff08;IATF&#xff09;开发&#xff0c;旨在提高汽车行业的质量管理水平&#xff0c;满足客户对汽车部件和零部件的要求。该标准是在ISO/TS 16949标准的基础上&#xff0c;专门为汽车行业…

Centos 7.9 配置VNCServer实现远程vnc连接

文章目录 1、Centos安装图形界面1.1、安装X Windows System图形界面1.2、安装GNOME图形界面 2、VNC SERVER配置2.1、VNC SERVER安装2.2、VNC SERVER配置1&#xff09;创建vnc配置文件2&#xff09;修改配置文件内容3&#xff09;完整配置文件参考 2.3、设置vnc密码2.4、配置防火…

自学网络安全的实用建议:如何从零到精通

目录 为什么写这篇文章 为什么我更合适回答这个问题 先问自己3个问题 1.一定要明确自己是否是真喜欢&#xff0c;还是一时好奇。 2.自学的习惯 3.选择网安、攻防这行的目标是什么&#xff1f; 确认无误后&#xff0c;那如何进入这个行业&#xff1f; 1.选择渗透测试集中…

暴力法解决最近对问题和凸包问题-实现可视化

目录 最近对问题 凸包问题 最近对问题 顾名思义就是采用蛮力法求出所有点之间的距离&#xff0c;然后进行比较找出第一个最近对&#xff0c;一个一个进行比较。 大概思路就是如图&#xff08;每个圈代表一个数对&#xff09; 第一个和其他四个比较 第二个和其他三个比较 …

mysql 其他类型转换为BIT

看官网说明,BIT没什么特殊之处。但实际操作却不能将任何其他类型字段转为BIT,下面两个都报语法错误 CAST(column AS BIT(1)) AS aa , CAST(column AS BIT) AS bb, BIT value则模式是VARBINARY b1 as cc, -- cc为VARBINARY类型 下面是《高性能MySQL(第四版)》中关于BIT类型的…

星途重启:244亿公里外的「旅行者1号」,修好了

2024年4月20日&#xff0c;旅行者1号工程团队时隔5个月&#xff0c;终于重新收到了来自47年前所发射的探测器传回的有效数据。 ▲收到数据当天&#xff0c;工程团队成员在NASA喷气动力实验室的会议室中欢呼。 01.关于旅行者1号 在当下5G和WIFI已经普及的时代&#xff0c;NASA喷…

笔记本电脑怎么多选删除文件?误删除文件怎么办

在日常使用笔记本电脑中&#xff0c;我们可能会遇到需要删除大量文件的情况&#xff0c;例如清理临时文件、整理文档或卸载不再需要的程序。手动一个一个地删除不仅效率低下&#xff0c;还可能遗漏某些文件。那么&#xff0c;如何在笔记本电脑上高效地进行多选删除操作呢&#…

在linux里登录远程服务器

在linux里登录远程服务器。在虚拟终端里输入命令&#xff1a; ssh 远程服务器ip -l username 然后输入登录密码&#xff0c;就可以登录到远程服务器的命令行界面。登录方便&#xff0c;字体也可以在本地机的虚拟终端里设置得大一点。 下面是一张截屏图片。

STM32CubeMX学习笔记30---FreeRTOS内存管理

一、简介 1 基本概念 FreeRTOS 操作系统将内核与内存管理分开实现&#xff0c;操作系统内核仅规定了必要的内存管理函数原型&#xff0c;而不关心这些内存管理函数是如何实现的&#xff0c;所以在 FreeRTOS 中提供了多种内存分配算法&#xff08;分配策略&#xff09;&#xf…

大数据面试题 —— 数据库

目录 关系型数据库与非关系型数据库的区别数据库三范式MySQL中 drop、delete、truncate的区别MySQL中 char和 varchar 的区别MySQL中inner join、left join、right join以及full join的区别MySQL中 having 和 where 的区别count(*)、count(1)、count(列名)的区别MySQL中视图和表…

【MySQL数据库开发设计规范】之命名规范

欢迎点开这篇文章&#xff0c;自我介绍一下哈&#xff0c;本人姑苏老陈 &#xff0c;是一名JAVA开发老兵。 本文收录于 《MySQL数据库开发设计规范》专栏中&#xff0c;该专栏主要分享一些关于MySQL数据库开发设计相关的技术规范文章&#xff0c;定期更新&#xff0c;欢迎关注&…