百度
最近,百度行政颁布了一项新政策,是关于「办公电脑开放内购」的新规定:
具体的,正式员工名下笔记本购置日期满 48 个月,本人可按采购价的 5% 进行内购。
例如采购价 2W 的笔记本电脑,满 4 年后,员工可 1000 元带回家。
消息一出,不少只在百度工作过,同时对外面大厂福利并不了解的同学,纷纷觉得这是天大的"福利",甚至已经开始盘算自己手上的电脑还有多久才满 48 个月 🤣🤣🤣
实际上,外面不少大厂,都是「免费」或「几乎免费」就可以拿走,而且规则还没有百度的多(例如百度限制名下唯一领用的笔记本电脑,且每 48 个月一次内购机会)。
要我说,满 4 年按 5% 采购价格内购是什么概念?妥妥电子垃圾,5% 这个价格,没有供应商会收。百度还煞有其事,整出诸多限制,真整的跟什么"福利"一样。
简单说一下其他大厂,在「旧电脑内购」这件事上的规矩:
腾讯/华为/阿里:电脑满三年,可申请换新,旧电脑免费带走 字节:电脑满三年,可申请换新,旧电脑按照天数进行折旧,价格远比 5% 要低。如果是满四年,无论型号,统一 100 元直接带走
百度的同学,看完之后,还觉得这是福利吗?
对此,你怎么看?你司的旧设备支持回购(甚至 0 元购)吗?规则如何?
...
回归主题。
周末,来一道超简单算法题。
题目描述
平台:LeetCode
题号:1161
给你一个二叉树的根节点 root
。
设根节点位于二叉树的第 层,而根节点的子节点位于第 层,依此类推。
请返回层内元素之和最大的那几层(可能只有一层)的层号,并返回其中最小的那个。
示例 1:
输入:root = [1,7,0,7,-8,null,null]
输出:2
解释:
第 1 层各元素之和为 1,
第 2 层各元素之和为 7 + 0 = 7,
第 3 层各元素之和为 7 + -8 = -1,
所以我们返回第 2 层的层号,它的层内元素之和最大。
示例 2:
输入:root = [989,null,10250,98693,-89388,null,null,null,-32127]
输出:2
提示:
树中的节点数在 范围内
层序遍历
根据题意,使用 BFS
进行层序遍历即可。
每次以「层」为单位进行拓展,统计该层的元素和,维护处理过程中的最大值层数和,以及层深度。
Java 代码:
class Solution {
public int maxLevelSum(TreeNode root) {
Deque<TreeNode> d = new ArrayDeque<>();
int max = -0x3f3f3f3f, depth = 1, ans = 0;
d.addLast(root);
while (!d.isEmpty()) {
int sz = d.size(), cur = 0;
while (sz-- > 0) {
TreeNode t = d.pollFirst();
if (t.left != null) d.addLast(t.left);
if (t.right != null) d.addLast(t.right);
cur += t.val;
}
if (cur > max) {
max = cur; ans = depth;
}
depth++;
}
return ans;
}
}
C++ 代码:
class Solution {
public:
int maxLevelSum(TreeNode* root) {
queue<TreeNode*> q;
int maxv = -0x3f3f3f3f, depth = 1, ans = 0;
q.push(root);
while (!q.empty()) {
int sz = q.size(), cur = 0;
while (sz-- > 0) {
TreeNode* t = q.front(); q.pop();
if (t->left != nullptr) q.push(t->left);
if (t->right != nullptr) q.push(t->right);
cur += t->val;
}
if (cur > maxv) {
maxv = cur; ans = depth;
}
depth++;
}
return ans;
}
};
Python 代码:
class Solution:
def maxLevelSum(self, root: Optional[TreeNode]) -> int:
maxv, depth, ans = -0x3f3f3f3f, 1, 0
d = deque([root])
while d:
sz, cur = len(d), 0
for _ in range(sz):
t = d.popleft()
if t.left:
d.append(t.left)
if t.right:
d.append(t.right)
cur += t.val
if cur > maxv:
maxv, ans = cur, depth
depth += 1
return ans
TypeScript 代码:
function maxLevelSum(root: TreeNode | null): number {
const d: TreeNode[] = new Array<TreeNode>()
let he = 0, ta = 0
d[ta++] = root
let max = -0x3f3f3f3f, depth = 1, ans = 0
while (he < ta) {
let sz = ta - he, cur = 0
while (sz-- > 0) {
const t = d[he++]
if (t.left != null) d[ta++] = t.left
if (t.right != null) d[ta++] = t.right
cur += t.val
}
if (cur > max) {
max = cur; ans = depth
}
depth++
}
return ans
};
时间复杂度: 空间复杂度:
最后
巨划算的 LeetCode 会员优惠通道目前仍可用 ~
使用福利优惠通道 leetcode.cn/premium/?promoChannel=acoier,年度会员 有效期额外增加两个月,季度会员 有效期额外增加两周,更有超大额专属 🧧 和实物 🎁 福利每月发放。
我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻。
欢迎关注,明天见。