【每日刷题】Day70

【每日刷题】Day70

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

[1. 922. 按奇偶排序数组 II - 力扣(LeetCode)](#1. 922. 按奇偶排序数组 II - 力扣(LeetCode))

[2. 905. 按奇偶排序数组 - 力扣(LeetCode)](#2. 905. 按奇偶排序数组 - 力扣(LeetCode))

[3. 515. 在每个树行中找最大值 - 力扣(LeetCode)](#3. 515. 在每个树行中找最大值 - 力扣(LeetCode))

1. 922. 按奇偶排序数组 II - 力扣(LeetCode)

//思路:归并。将数组中奇、偶数分别存储进两个数组,随后根据i的奇偶性从两个数组中拿取数据。

int* sortArrayByParityII(int* nums, int numsSize, int* returnSize)

{

int even[10001] = {0};//偶数数组

int count1 = 0;

int odd[10001] = {0};//奇数数组

int count2 = 0;

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

{

if(nums[i]%2==0)

even[count1++] = nums[i];

else

odd[count2++] = nums[i];

}

int flag1 = 0;

int flag2 = 0;

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

{

if(i%2==0)

nums[i] = even[flag1++];

else

nums[i] = odd[flag2++];

}

*returnSize = numsSize;

return nums;

}

2. 905. 按奇偶排序数组 - 力扣(LeetCode)

//思路:归并。与上一题类似。

int* sortArrayByParity(int* nums, int numsSize, int* returnSize)

{

int even[5002] = {0};

int count1 = 0;

int odd[5002] = {0};

int count2 = 0;

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

{

if(nums[i]%2==0)

even[count1++] = nums[i];

else

odd[count2++] = nums[i];

}

int flag1 = 0;

int flag2 = 0;

while(flag1<count1)

{

nums[flag1] = even[flag1];

flag1++;

}

int begin = flag1;

while(flag2<count2)

{

nums[begin++] = odd[flag2];

flag2++;

}

*returnSize = numsSize;

return nums;

}

3. 515. 在每个树行中找最大值 - 力扣(LeetCode)

//思路:深度优先遍历。首先求出二叉树的最大深度,用于判断需要循环多少次。在每次循环中,我们让i的值作为我们所要求的第i层的最大值,采用深度优先遍历遍历到第i层,创建一个max变量,用于记录最大值,随后记录在答案数组中。

typedef struct TreeNode TN;

//判断是否为叶子结点

bool IsLeafNode(TN* root)

{

return !root->left&&!root->right;

}

//求二叉树最大深度

int TreeHigh(TN* root)

{

if(!root)

return 0;

if(IsLeafNode(root))

return 1;

int left = TreeHigh(root->left);

int right = TreeHigh(root->right);

return 1+(left>right?left:right);

}

//求第K层的最大值

void Max(TN* root,int k,int* max)

{

if(!root)

return;

if(k==1)//K==1说明当前层为所求层

{

(*max) = (*max)>(root->val)?(*max):root->val;//记录max,直接返回

return;

}

//深度优先遍历

Max(root->left,k-1,max);

Max(root->right,k-1,max);

}

int* largestValues(struct TreeNode* root, int* returnSize)

{

int* ans = (int*)malloc(sizeof(int)*10001);

int count = 0;

int high = TreeHigh(root);

for(int i = 1;i<=high;i++)//循环次数为要求层数

{

int max = -2147483648;

Max(root,i,&max);

ans[count++] = max;

}

*returnSize = count;

return ans;

}

相关推荐
We་ct2 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
王老师青少年编程6 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮6 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说6 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wuweijianlove7 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung8 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了8 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
HXDGCL8 小时前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化
谭欣辰8 小时前
C++ 排列组合完整指南
开发语言·c++·算法
代码中介商8 小时前
银行管理系统的业务血肉 —— 流程、状态机、输入校验与持久化(下篇)
c语言·算法