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

}

相关推荐
JieE21216 小时前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE21216 小时前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术21 小时前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦1 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050731 天前
(一)小红的数组操作
算法·编程语言
怕浪猫1 天前
Electron 系列文章封面图
算法·架构·前端框架
徐小夕1 天前
JitWord 3.0 正式发布,高精度Word异构解析+复杂组件兼容,打造web端协同Word编辑器
前端·vue.js·算法
LDR0062 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
通信小呆呆2 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人