[Tencent/WeChat] 面试算法题及解题报告

说明

算法部分一共面了四道题
解题思路仅供参考,可能存在更好的解法。

题目1

题意

层序遍历二叉树,每个节点有一个值(val),以链表的形式返回遍历节点对应的val。
树和链表定义如下:
struct TreeNode {
int val;
TreeNode* Left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
struct ListNode {
int val;
ListNode* next;
ListNode(int v) : val(v), next(NULL) {}
};

思路

使用队列来模拟宽度优先搜索,同时还考察了链表的基本插入操作。

代码

const int N = 1e6 + 10;
TreeNode* que[N];   //使用数组来模拟队列
int head, tail;

//插入队列
void add(TreeNode* u) {
    
    if (u == NULL) return;
    que[tail] = new TreeNode;
    que[tail++] = u;
}

ListNode* bfs(TreeNode* root) {
   
    head = tail = 0;
    add(root);
    
    ListNode* rt = new ListNode;
    rt -> next = NULL;
    ListNode* now = rt;

    while (head < tail) {
   
        ListNode* u = que[head++];
        
        now -> val = u -> val;
        
        ListNode *p = new ListNode;
        now -> next = p;
        p -> next = NULL;
        now = p;
        
        add(u -> left);
        add(u -> right);
    }
    
    return rt;
}

题目2

题意

给定区间[x, y],问能否从这个区间中的整数挑选若干整数,使得和为K,每个数字可以重复用多次。如果能,返回其中一种构造方式。(1<=k,x,y<10^9)(x<=y)
bool Construct(int k, int x, int y, vector< int > & result);

思路

通过在纸上模拟,容易发现对于区间 [ x , y ] [x,y] [x,y]中的数,任意挑选后的和其实包含在若干个区间中,如:
[ x , y ] , [ 2 x , 2 y ] . . . [ p x , p y ] ( p ∈ Z ) [x,y],[2x,2y]...[px, py](p \in Z) [x,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值