【每日刷题】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 arr[10000] = {0};

int stack[10000] = {0};

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

int num = 0;

int count = 0;

LN* pmove = head;

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

{

arr[num++] = pmove->val;

pmove = pmove->next;

}

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

{

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

stack[count++] = i;

else

{

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

{

if(arr[i]>arr[stack[count-1]])

ans[stack[count-1]] = arr[i];

else

break;

count--;

}

stack[count++] = i;//将当前数组元素下标放入栈顶

}

}

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

{

ans[stack[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 arr[10000] = {0};

int count = 0;

root->next = NULL;

QE q;

QueInit(&q);

QuePush(&q,root);

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

{

QDataType tmp = QueGetHead(&q);

arr[count++] = 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操作

{

arr[i]->next = arr[i+1];

i++;

j--;

}

arr[i++]->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++)

{

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

}

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

{

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

strcpy(ans[i-1],"FizzBuzz");

else if(i%3==0)

strcpy(ans[i-1],"Fizz");

else if(i%5==0)

strcpy(ans[i-1],"Buzz");

else

sprintf(ans[i-1],"%d",i);

}

*returnSize = n;

return ans;

}

相关推荐
索迪迈科技1 天前
基于野火F407开发板实现电源管理-停止模式
c语言·stm32·单片机·嵌入式硬件·mcu
蒋星熠1 天前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
小莞尔1 天前
【51单片机】【protues仿真】基于51单片机宠物投食系统
c语言·stm32·单片机·嵌入式硬件·51单片机
小欣加油1 天前
leetcode 面试题01.02判定是否互为字符重排
数据结构·c++·算法·leetcode·职场和发展
3Cloudream1 天前
LeetCode 003. 无重复字符的最长子串 - 滑动窗口与哈希表详解
算法·leetcode·字符串·双指针·滑动窗口·哈希表·中等
王璐WL1 天前
【c++】c++第一课:命名空间
数据结构·c++·算法
空白到白1 天前
机器学习-聚类
人工智能·算法·机器学习·聚类
小马学嵌入式~1 天前
嵌入式 SQLite 数据库开发笔记
linux·c语言·数据库·笔记·sql·学习·sqlite
索迪迈科技1 天前
java后端工程师进修ing(研一版 || day40)
java·开发语言·学习·算法
zzzsde1 天前
【数据结构】队列
数据结构·算法