【每日刷题】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;

}

相关推荐
UIU1144 分钟前
P1003 [NOIP 2011 提高组] 铺地毯
数据结构·c++·算法
爱读书的小胖8 分钟前
LeetCode 88. 合并两个有序数组 C 解题分析
c语言·数据结构·算法
inrichtt41 分钟前
第七课时:STM32时钟系统揭秘:从零理解时钟树
c语言·数据结构·stm32·单片机·嵌入式硬件
知识分享小能手1 小时前
C学习教程,从入门到精通,C语言指针 —— 详细知识点总结(10)
c语言·开发语言·学习
金融小师妹1 小时前
多因子时间序列分析:美元与美债收益率变化对黄金价格+1.6%的影响
c语言·人工智能·git·决策树·pyqt
垆边人似月.1 小时前
删边使每个连通块权值和为 target
算法·深度优先·图论
xxwl5851 小时前
区域赛算法模版第四章---数据结构
数据结构·c++·算法
额额额对了2 小时前
Linux 驱动开发:基于 platform 总线 + misc 设备的 DS18B20 单总线温度驱动
linux·c语言·开发语言·驱动开发·嵌入式硬件
奶盐cookie2 小时前
内存区域:栈、全局区和静态区
c语言