您的位置:首页 > 职场人生

面试题53 - II. 0~n-1中缺失的数字/ 面试题54. 二叉搜索树的第k大节点/ 面试题55 - I. 二叉树的深度

2020-03-10 00:16 661 查看

面试题53 - II. 0~n-1中缺失的数字

0到n-1中缺失的数字

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

示例 1:

在这里插入代码片

输入: [0,1,3]
输出: 2
示例 2:

输入: [0,1,2,3,4,5,6,7,9]
输出: 8

分析:

本题考查的是二分法
由于原数组已经排好序,所以在缺失的元素之前,所有元素与其下标是一一对应的,但是确实元素后面的元素就不是对应的了;
所以此问题转换成找到该数组中第一个与其下标不对应的元素

  • 如果中间值和其下标不等,并且前一个元素和其下标相等,则说明该中间元素就是第一个不对应下标的元素,return mid;
  • 如果中间值和其下标不等,前一个元素也不等,则说明缺失元素在前半部分;令right=mid-1
  • 如果中间元素和下标相等,则说明确实元素在后半部分,令left=mid+1
class Solution {
public:
int missingNumber(vector<int>& nums) {
int left = 0;
int right = nums.size()-1;
int len=nums.size();

while(left<=right)
{
int mid = (left+right)/2;
if(nums[mid] != mid)
{
if(mid==0 || nums[mid-1]==mid-1)
return mid;
right=mid-1;
}
else
left=mid+1;
}
if(left==len)
return len;
//无效的输入,如数组未按照规则排序,
//或者有数字不是0~n-1范围内的
return -1;
}

};
class Solution {
public:
int missingNumber(vector<int>& nums) {
int left = 0;
int right = nums.size()-1;

if( nums[nums.size()-1]==nums.size()-1 )
return nums.size();

while(left<right)
{
int mid = (left+right)/2;
if(nums[mid] == mid)
left=mid+1;
else
right=mid;
}
return right;
}

};

面试题54. 二叉搜索树的第k大节点

分析

由于是二叉搜索树,其中序遍历是一个有序序列,因此考察中序遍历
一般的中序遍历是从左子树开始遍历。得到的序列是递增的,此时的到的是第k小;
由于本题要求第k大,因此要从右子树开始遍历,得到递减序列

class Solution {
public:
//方法1 递归
int res=0;
int n=0;
int kthLargest(TreeNode* root, int k) {
dfs(root,k);
return res;
}
void dfs(TreeNode* root,int k){
if(root==NULL)return ;
if(root->right)
dfs(root->right,k);
n++;
if(n==k)
res=root->val;
if(root->left)
dfs(root->left,k);
return ;
}
};

面试题55 - I. 二叉树的深度

分析

递归:

  • 首先考虑边界情况,root==NULL
  • 若只有左子树,则左子树的深度为左子树的深度+1;
  • 若只有右子树,则右子树的深度为右子树的深度+1;
  • 树的深度 则为左右子树深度的较大值
class Solution {
public:
int maxDepth(TreeNode* root) {

if(root==NULL) return 0;
int h_left=maxDepth(root->left)+1;//左子树
int h_right=maxDepth(root->right)+1;//右子树
return (h_left > h_right) ? h_left : h_right;

}
};
  • 点赞
  • 收藏
  • 分享
  • 文章举报
qq_39457296 发布了16 篇原创文章 · 获赞 0 · 访问量 181 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: