[笔试编程]2017.8.29腾讯模拟,满二叉排序树找最小子树
2017-08-29 22:38
204 查看
题目
满二叉树排序树,高度k,节点数2^k-1,节点值1~2^k-1,给定3个数,求包含这3个数的最小子树的根节点。
输入4个数组,第一个值为高度,后面3个值为目标数。
例:
输入
4 10 15 13
输出
12
思路
分治
1. 判断中间数是否包含在要找的数里面,包含则中间数是所求
2. 判断目标数是否全在左/右半,是则继续找左/右半。
3. 不全在左/右半,则中间数为所求。
满二叉树排序树,高度k,节点数2^k-1,节点值1~2^k-1,给定3个数,求包含这3个数的最小子树的根节点。
输入4个数组,第一个值为高度,后面3个值为目标数。
例:
输入
4 10 15 13
输出
12
思路
分治
1. 判断中间数是否包含在要找的数里面,包含则中间数是所求
2. 判断目标数是否全在左/右半,是则继续找左/右半。
3. 不全在左/右半,则中间数为所求。
#include <iostream> #include <algorithm> #include <vector> /* 满二叉排序数,层数k,节点数2^n-1, 1~2^n-1 4 10 15 13 */ using namespace std; int div(int left, int right, vector<int> &target) { int mid = (left + right) / 2; if (find(target.begin(), target.end(), mid) != target.end()) { return mid; } else if (*(target.end() - 1) < mid) { return div(left, mid - 1, target); } else if (target[0] > mid) { return div(mid + 1, right, target); } else { return mid; } } int main() { int k; vector<int> target_nums(3); cin >> k >> target_nums[0] >> target_nums[1] >> target_nums[2]; sort(target_nums.begin(), target_nums.end()); int l = 1; int r = powl(2,k) - 1; int res = div(l, r, target_nums); cout << r 4000 es << endl; return 0; }
相关文章推荐
- 20170829腾讯模拟笔试题解法,满二叉排序树给定三个节点的值,求最小子树根节点值
- 在linux编程中,以下哪个TCP的套接字选项与nagle算法的开启和关闭有关?----腾讯2016研发工程师在线模拟笔试题
- 【腾讯笔试】满二叉排序树中查找三个节点的最小子树的根节点
- 腾讯2016编程笔试题
- 腾讯2017秋招笔试编程
- 关于多线程和多进程编程,下面描述正确的是():----腾讯2016研发工程师笔试题(一)
- 【编程】牛客网第三次模拟笔试
- 2016腾讯测试开发岗笔试编程第一题
- 2017年爱奇艺校招模拟笔试编程
- 腾讯在线模拟笔试题目,格雷码问题
- 腾讯2016研发工程师在线模拟笔试题----32位系统中,定义**a[3][4],则变量占用内存空间为()。
- 2017年校招全国统一模拟笔试(第三场)编程题集合(Javascript版)
- 【编程】牛客网第四次模拟笔试
- 腾讯模拟笔试编程题--根据输入的点坐标判断是够能构成一个正方形
- 关于epoll和select的区别,哪些说法是正确的?----腾讯2016研发工程师在线模拟笔试题
- 腾讯2016春招实习生(软件开发)笔试模拟卷
- 腾讯2016在线模拟笔试
- 2016腾讯模拟试题编程第二道
- 2017年校招全国统一模拟笔试(第五场)编程题集合(Javascript版)
- 腾讯笔试:满二叉排序树问题