【每日刷题】Day72
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
[1. 1287. 有序数组中出现次数超过25%的元素 - 力扣(LeetCode)](#1. 1287. 有序数组中出现次数超过25%的元素 - 力扣(LeetCode))
[2. 993. 二叉树的堂兄弟节点 - 力扣(LeetCode)](#2. 993. 二叉树的堂兄弟节点 - 力扣(LeetCode))
[3. 1431. 拥有最多糖果的孩子 - 力扣(LeetCode)](#3. 1431. 拥有最多糖果的孩子 - 力扣(LeetCode))
1. 1287. 有序数组中出现次数超过25%的元素 - 力扣(LeetCode)
//思路:哈希记数。
int findSpecialInteger(int* arr, int arrSize)
{
int ans = 0;
int hash[100001] = {0};
for(int i = 0;i<arrSize;i++)
{
hash[arr[i]]+=1;
}
for(int i = 0;i<100001;i++)
{
if(hash[i]>(arrSize/4))
{
ans = i;
break;
}
}
return ans;
}
2. 993. 二叉树的堂兄弟节点 - 力扣(LeetCode)
//思路:深度优先遍历。首先遍历求出,x、y值对应节点的深度。判断深度是否相同;随后根据x、y值对应的节点找其父节点,获取其父节点的值,判断二者父节点值是否相同。
typedef struct TreeNode TN;
//求所给值对应的节点深度
int ValHigh(TN* root,int val,int high)
{
if(!root)
return 0;
if(root->val==val)
return high;
int left = ValHigh(root->left,val,high+1);
if(left)
return left;
return ValHigh(root->right,val,high+1);
}
//求其父节点值
int FatherNode(TN* root,int val)
{
if(!root)
return 0;
if((root->left&&root->left->val==val)||(root->right&&root->right->val==val))
return root->val;
int left = FatherNode(root->left,val);
if(left)
return left;
return FatherNode(root->right,val);
}
bool isCousins(struct TreeNode* root, int x, int y)
{
//求节点深度
int xhigh = ValHigh(root,x,1);
int yhigh = ValHigh(root,y,1);
if(xhigh!=yhigh)
return false;
//求父节点值
int father1 = FatherNode(root,x);
int father2 = FatherNode(root,y);
if(father1==father2)
return false;
return true;
}
3. 1431. 拥有最多糖果的孩子 - 力扣(LeetCode)
//思路:一次遍历判断。
bool* kidsWithCandies(int* candies, int candiesSize, int extraCandies, int* returnSize)
{
int max = -1;
for(int i = 0;i<candiesSize;i++)
{
if(candies[i]>max)
max = candies[i];
}
bool* ans = (bool*)malloc(sizeof(bool)*101);
int count = 0;
for(int i = 0;i<candiesSize;i++)
{
if(candies[i]+extraCandies>=max)
ans[count++] = true;
else
ans[count++] = false;
}
*returnSize = count;
return ans;
}