【每日刷题】Day53

【每日刷题】Day53

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

[1. 1019. 链表中的下一个更大节点 - 力扣(LeetCode)](#1. 1019. 链表中的下一个更大节点 - 力扣(LeetCode))

[2. 116. 填充每个节点的下一个右侧节点指针 - 力扣(LeetCode)](#2. 116. 填充每个节点的下一个右侧节点指针 - 力扣(LeetCode))

[3. 412. Fizz Buzz - 力扣(LeetCode)](#3. 412. Fizz Buzz - 力扣(LeetCode))

1. 1019. 链表中的下一个更大节点 - 力扣(LeetCode)

//思路:栈。将链表中的元素存入一个数组。遍历这个数组,将数组元素的下标入栈。

//入栈情况:① 如果当前栈中没有元素,直接入栈 ② 如果数组当前元素<数组以当前栈顶元素为下标的元素,直接入栈。

//出栈情况: 如果数组当前元素>数组以当前栈顶元素为下标的元素,将答案数组中当前栈顶元素为下标的位置放为数组当前元素(也就是找到了下一个更大元素),并继续从栈顶往栈底比较,直到遇到 数组当前元素<数组以当前栈顶元素为下标的元素****的情况,break跳出循环,并将数组当前元素下标放入栈顶。

//当遍历完数组后,如果栈中还有元素,说明数组中以这些元素为下标的元素没有找到下一个更大的值,将答案数组中以栈中元素为下标的位置置为0。

typedef struct ListNode LN;

int* nextLargerNodes(struct ListNode* head, int* returnSize)

{

int arr10000 = {0};

int stack10000 = {0};

int* ans = (int*)malloc(sizeof(LN)*10000);

int num = 0;

int count = 0;

LN* pmove = head;

while(pmove)//将链表元素存入数组

{

arrnum++ = pmove->val;

pmove = pmove->next;

}

for(int i = 0;i<num;i++)//遍历数组

{

if(count==0||arri<arrstack\[count-1])//如果栈中没有元素或者 数组当前元素<数组以当前栈顶元素为下标的元素**,入栈**

stackcount++ = i;

else

{

while(count)//否则,从栈顶往栈底遍历栈中的下标元素,直到遍历到栈底或者 数组当前元素>数组以当前栈顶元素为下标的元素**,跳出循环**

{

if(arri>arrstack\[count-1])

ansstack\[count-1] = arri;

else

break;

count--;

}

stackcount++ = i;//将当前数组元素下标放入栈顶

}

}

for(int i = 0;i<count;i++)

{

ansstack\[i] = 0;//如果栈中还有元素,说明数组中以栈中元素为下标的元素没有找到下一个更大的值,将答案数组以栈中元素为下标的位置置为0。

}

*returnSize = num;

return ans;

}

2. 116. 填充每个节点的下一个右侧节点指针 - 力扣(LeetCode)

//思路:层序遍历。将层序遍历的结果存入数组中(存放的元素为struct Node* 的指针),因为是完美二叉树,因此每一层的结点个数都满足 2^x 。因此,只需要根据每层的节点数改变遍历的次数。

typedef struct Node* 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;

}

//判断队列是否为空

bool QueEmpty(QE* qe)

{

assert(qe);

return 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;

}

struct Node* connect(struct Node* root)

{

if(!root)

return NULL;

QDataType arr10000 = {0};

int count = 0;

root->next = NULL;

QE q;

QueInit(&q);

QuePush(&q,root);

while(!QueEmpty(&q))//入列

{

QDataType tmp = QueGetHead(&q);

arrcount++ = QueGetHead(&q);//将队头元素存入数组中

QuePop(&q);

if(tmp->left)//继续层序遍历

QuePush(&q,tmp->left);

if(tmp->right)

QuePush(&q,tmp->right);

}

int i = 1;

int flag = 1;

while(i<count)//遍历数组

{

int j = pow(2,flag);

while(j-1)//选择其中的2^flag次方个结点进行next操作

{

arri->next = arri+1;

i++;

j--;

}

arri++->next = NULL;//每一层的最后一个结点的next为NULL

flag++;

}

return root;

}

3. 412. Fizz Buzz - 力扣(LeetCode)

//思路:题目不难,主要考察对动态内存管理知识的理解能力。

char ** fizzBuzz(int n, int* returnSize)

{

char** ans = (char**)malloc(sizeof(char*)*n);//申请一块空间,存放指针

for(int i = 0;i<n;i++)

{

ansi = (char*)malloc(sizeof(char)*9);//对这块空间中的每个指针申请空间

}

for(int i = 1;i<=n;i++)

{

if(i%3==0&&i%5==0)

strcpy(ansi-1,"FizzBuzz");

else if(i%3==0)

strcpy(ansi-1,"Fizz");

else if(i%5==0)

strcpy(ansi-1,"Buzz");

else

sprintf(ansi-1,"%d",i);

}

*returnSize = n;

return ans;

}

相关推荐
KJ_BioMed12 小时前
从PDB到高亲和力分子:De novo生成式计算化学Pipeline剖析
算法·生物医药·生物科研·科研干货·化合物设计
一个王同学13 小时前
从零到一 | CV转多模态大模型 | week17 | LLM 推理优化 & vLLM 详解
人工智能·深度学习·算法·机器学习·计算机视觉·vllm
jimy113 小时前
C语言模拟对象、方法:“函数指针+结构体“复用函数指针指向的函数体
c语言·开发语言
三品吉他手会点灯14 小时前
嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
c语言·人工智能·笔记·嵌入式硬件·学习·机器学习
旖-旎14 小时前
《LeetCode 53 最大子数组和 || LeetCode 918 环形子数组的最大和》
c++·算法·leetcode·动态规划
变量未定义~14 小时前
单调栈+倍增思想 皇家守卫【算法赛】、单调队列 附近最小
算法
QN1幻化引擎14 小时前
给 AI 做一次「意识体检」——基于 QN1 幻化引擎的灵鉴意识识别框架与 DalinX V5 实测
大数据·数据结构·人工智能·算法·架构
拂拉氏14 小时前
【知识讲解】 AVL树从基本成员的介绍到核心接口的实现(插入、判断、删除等等)
数据结构·算法·avl树
小樱花的樱花15 小时前
Linux 线程的创建
linux·c语言·开发语言
可靠的仙人掌15 小时前
SAC(Soft Actor-Critic)算法底座
开发语言·算法·php