【每日刷题】Day78
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 1608. 特殊数组的特征值 - 力扣(LeetCode)
2. 1385. 两个数组间的距离值 - 力扣(LeetCode)
3. 面试题 04.10. 检查子树 - 力扣(LeetCode)
1. 1608. 特殊数组的特征值 - 力扣(LeetCode)
//思路:假设法。我们在最开始假设特征值为numsSize,遍历数组,记录数组中≥特征值元素的个数,看是否与特征值相同。相同则跳出循环,不相同则将特征值--继续下一次比较。
int specialArray(int* nums, int numsSize)
{
int ans = numsSize;//初始特征值假设为numsSize
while(ans)
{
int flag = 0;
for(int i = 0;i<numsSize;i++)
{
if(nums[i]>=ans)//计算数组中≥特征值的元素个数
flag++;
}
if(flag==ans)//判断是否与特征值相同,由此判断特征值假设正不正确
break;
else//不正确就将特征值--继续进行下一次比较
ans--;
}
if(!ans)//当特征值为0时,说明该数组不是一个特征数组
return -1;
return ans;
}
2. 1385. 两个数组间的距离值 - 力扣(LeetCode)
//思路:遍历。
int findTheDistanceValue(int* arr1, int arr1Size, int* arr2, int arr2Size, int d)
{
int ans = 0;
for(int i = 0;i<arr1Size;i++)
{
int flag = 1;
for(int j = 0;j<arr2Size;j++)
{
if(abs(arr1[i]-arr2[j])<=d)
flag = 0;
}
if(flag)
ans++;
}
return ans;
}
3. 面试题 04.10. 检查子树 - 力扣(LeetCode)
//思路:递归遍历。遍历二叉树1,当遇到的节点val=二叉树2根节点val时,开始比较两树是否相同。当二叉树1中有多个节点val=二叉树2根节点val时,需要都比较一下。
typedef struct TreeNode TN;
bool __checkSubTree1(TN* root1,TN* root2)//判断两树是否完全相同
{
if(!root1&&!root2)
return true;
else if((!root1&&root2)||(root1&&!root2))
return false;
return __checkSubTree1(root1->left,root2->left)
&&__checkSubTree1(root1->right,root2->right);
}
bool _checkSubTree(TN* root1,TN* root2)
{
if(!root1)
return false;
if(root1->val==root2->val)//遇到节点的val=二叉树2根节点的val时开始比较
{
bool ret = __checkSubTree1(root1,root2);
if(ret)//由于二叉树1中可能存在多个节点的val=二叉树2根节点的val,因此不能比较一个就返回结果
return ret;
}
bool left = _checkSubTree(root1->left,root2);
if(left)
return left;
return _checkSubTree(root1->right,root2);
}
bool checkSubTree(struct TreeNode* t1, struct TreeNode* t2)
{
return _checkSubTree(t1,t2);
}