专栏名称: 吴师兄学算法
和程序员小吴一起从初学者的角度学习算法,以动画的形式呈现解题的思路。每周四篇原创文章,期待你的鉴赏!
目录
相关文章推荐
武汉大学学生会  ·  珈学周报|第149期:本周焦点&学情周报&《 ... ·  18 小时前  
兰州大学萃英在线  ·  还记得你的“年后再说”吗?该算账啦! ·  3 天前  
51好读  ›  专栏  ›  吴师兄学算法

字节跳动研发岗的年终奖。。

吴师兄学算法  · 公众号  ·  · 2024-04-07 19:20

正文

字节绩效开奖

近日,字节绩效开奖了。

这次的字节绩效和往年不同,主打一个 「区分度」

字节的绩效分为「f、i、m-、m、m+、e、e+、o」几档(从小到大),但通常会集中在中间四档,即「m-、m、m+、e」。

对应的绩效奖金通常是 1.5~2 个月(m-)、3 个月(m)、4~4.5 个月(m+)、7~9 个月(e)。

往年来说,通常这几档的分布为 1531,而今年,差不多就是 3331。

也就是 m- 的人变多了。

m- 关乎的不只是绩效,还有后面的发展。

如果得了一次 m-,可主动要 n+1,如果两次 m-,就要走人了(被动 n+1)。

像此类的绩效评估上的改动,对员工的影响几乎就是全覆盖的,即使这次没有 m-,也会担心下次是否轮到自己,暗地里可能会密谋出路。

往树上开一枪,最担惊受怕的往往是还没中枪的鸟儿。

对此,你怎么看?

...

回归主线。

来一道近期「字节社招」中出现的算法原题。

题目描述

平台:LeetCode

题号:1802

给你三个正整数 n index maxSum

你需要构造一个同时满足下述所有条件的数组 nums (下标 从 0 开始 计数):

  • nums.length == n
  • nums[i] 是 正整数 ,其中 0 <= i < n
  • abs(nums[i] - nums[i+1]) <= 1 ,其中 0 <= i < n-1
  • nums 中所有元素之和不超过 maxSum
  • nums[index] 的值被 最大化
  • 返回你所构造的数组中的 nums[index]

注意: abs(x) 等于 x 的前提是 x >= 0 ;否则, abs(x) 等于 -x

示例 1:

输入:n = 4, index = 2,  maxSum = 6

输出:2

解释:数组 [1,1,2,1] 和 [1,2,2,1] 满足所有条件。不存在其他在指定下标处具有更大值的有效数组。

示例 2:

输入:n = 6, index = 1,  maxSum = 10

输出:3

提示:

二分 + 贪心 + 数学

根据题意,容易想到以 ans 为分割点的正整数数组具有二段性,其中 ans 为最大的

小于等于 ans 的值均能通过直接调整 来构造,不会违反总和不超过 max 的限制;大于 ans 的值则无法满足 max 限制。

基于此我们可通过「二分」的方式来找分割点。

假设当前二分到的值为 x ,考虑如何实现一个 check 函数,该函数用于判断 x 能否作为

为了令 时,数组总和 sum 不超过 max 限制,我们应当贪心构造 的剩余元素:从 开始往两侧构造,按照递减的方式进行逐个构造,若递减到 则维持不变。

这样可确保构造出来的 既满足 同时元素总和最小。

位置 idx 的值为 x ,其左边有 idx 个元素,其右边有 n - idx - 1 个元素。

利用「等差数列求和」公式分别从 x - 1 开始构造(注意:这里说的构造仅是计算 总和),若总和不超过 max 说明 满足要求,我们令 ,否则令







请到「今天看啥」查看全文