支付宝研发岗的年终奖。。

支付宝年终奖

这两天,脉脉上陆续有支付宝小伙伴爆料年终奖。

绝大多数爆料都是从脉脉官方渠道进行收集(打开特殊入口,填写表格),因此可信度较高,都带具体金额:

但可惜的是,脉脉统计年终奖爆料的时候,没有统计绩效系数是多少。

众所周知,阿里系的公司,采用的是双序列职业发展体系:

  • M 序列代表管理路线,从 M1 到 M10
  • P 序列代表技术路线,从 P4 到 P14

除了定级,另外一个和年终奖挂勾的是绩效系数,采取的是五分制:

  • 2.5 及以下:不可接受
  • 3:需要改进
  • 3.25:需要提高
  • 3.5:符合期望
  • 3.75:部分超出期望
  • 4:超出期望
  • 4.5:一贯持续超出期望
  • 5:卓越

常规分布基本是 2.53.25 占 10%,3.5 占 60%,3.755 占 30%,即 361 分布。

实际上基本都围绕着 3.25、3.5 和 3.75 这三档进行。

如果取得 3.75 系数的话,不仅会获得超额年终,还会有幅度较大的薪资涨幅。

例如这位网友:

定级 14,绩效 3.75,拿到年终奖 22W(不算 13 薪),薪资涨幅 14%,涨完后 base 来到了 57k。

这几年大家可没少吐槽支付宝,尤其是在越来越多人选择微信支付的今天。

但吐槽归吐槽,支付宝仍然是国内超一线互联网大厂,同时也是头巨大的现金奶牛。

...

回归主线。

来一道和「支付宝」相关的算法题。

题目描述

平台:LeetCode

题号:915

给定一个数组 nums,将其划分为两个连续子数组 leftright,使得:

  • left 中的每个元素都小于或等于 right 中的每个元素。
  • leftright 都是非空的。
  • left 的长度要尽可能小。

在完成这样的分组后返回 left 的长度。

用例可以保证存在这样的划分方法。

示例 1:

css 复制代码
输入:nums = [5,0,3,8,6]

输出:3

解释:left = [5,0,3],right = [8,6]

示例 2:

css 复制代码
输入:nums = [1,1,1,0,6,12]

输出:4

解释:left = [1,1,1,0],right = [6,12]

提示:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> 2 < = n u m s . l e n g t h < = 1 0 5 2 <= nums.length <= 10^5 </math>2<=nums.length<=105
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> 0 < = n u m s [ i ] < = 1 0 6 0 <= nums[i] <= 10^6 </math>0<=nums[i]<=106
  • 可以保证至少有一种方法能够按题目所描述的那样对 nums 进行划分。

模拟

根据题意,我们知道本质是求分割点,使得分割点的「左边的子数组的最大值」小于等于「右边的子数组的最小值」。

我们可以先通过一次遍历(从后往前)统计出所有后缀的最小值 min,其中 min[i] = x 含义为下标范围在 <math xmlns="http://www.w3.org/1998/Math/MathML"> [ i , n − 1 ] [i, n - 1] </math>[i,n−1] 的 <math xmlns="http://www.w3.org/1998/Math/MathML"> n u m s [ i ] nums[i] </math>nums[i] 的最小值为 x,然后再通过第二次遍历(从前往后)统计每个前缀的最大值(使用单变量进行维护),找到第一个符合条件的分割点即是答案。

Java 代码:

Java 复制代码
class Solution {
    public int partitionDisjoint(int[] nums) {
        int n = nums.length;
        int[] min = new int[n + 10];
        min[n - 1] = nums[n - 1];
        for (int i = n - 2; i >= 0; i--) min[i] = Math.min(min[i + 1], nums[i]);
        for (int i = 0, max = 0; i < n - 1; i++) {
            max = Math.max(max, nums[i]);
            if (max <= min[i + 1]) return i + 1;
        }
        return -1; // never
    }
}

C++ 代码:

C++ 复制代码
class Solution {
public:
    int partitionDisjoint(vector<int>& nums) {
        int n = nums.size();
        vector<int> arr(n + 10);
        arr[n - 1] = nums[n - 1];
        for (int i = n - 2; i >= 0; i--) arr[i] = min(arr[i + 1], nums[i]);
        int maxv = 0;
        for (int i = 0; i < n - 1; i++) {
            maxv = max(maxv, nums[i]);
            if (maxv <= arr[i + 1]) return i + 1;
        }
        return -1; // never
    }
};

Python 代码:

Python 复制代码
class Solution:
    def partitionDisjoint(self, nums: List[int]) -> int:
        n = len(nums)
        minv = [0] * (n + 10)
        minv[n - 1] = nums[n - 1]
        for i in range(n - 2, -1, -1):
            minv[i] = min(minv[i + 1], nums[i])
        maxv = 0
        for i in range(n - 1):
            maxv = max(maxv, nums[i])
            if maxv <= minv[i + 1]:
                return i + 1
        return -1

TypeScript 代码:

TypeScript 复制代码
function partitionDisjoint(nums: number[]): number {
    const n = nums.length
    const min = new Array<number>(n + 10).fill(nums[n - 1])
    for (let i = n - 2; i >= 0; i--) min[i] = Math.min(min[i + 1], nums[i])
    for (let i = 0, max = 0; i < n; i++) {
        max = Math.max(max, nums[i])
        if (max <= min[i + 1]) return i + 1
    }
    return -1
}
  • 时间复杂度: <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( n ) O(n) </math>O(n)
  • 空间复杂度: <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( n ) O(n) </math>O(n)

最后

给大伙通知一下 📢 :

全网最低价 LeetCode 会员目前仍可用!!!

📅 年度会员:有效期加赠两个月!! ; 季度会员:有效期加赠两周!!

🧧 年度会员:获 66.66 现金红包!! ; 季度会员:获 22.22 现金红包!!

🎁 年度会员:参与当月丰厚专属实物抽奖(中奖率 > 30%)!!

专属链接:leetcode.cn/premium/?pr...

更多详情请戳 这里

我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻。

欢迎关注,明天见。

更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉

相关推荐
什码情况16 分钟前
星际篮球争霸赛/MVP争夺战 - 华为OD机试真题(A卷、Java题解)
java·数据结构·算法·华为od·面试·机试
天天打码20 分钟前
Rspack:字节跳动自研 Web 构建工具-基于 Rust打造高性能前端工具链
开发语言·前端·javascript·rust·开源
字节高级特工25 分钟前
【C++】”如虎添翼“:模板初阶
java·c语言·前端·javascript·c++·学习·算法
db_lnn_20211 小时前
【vue】全局组件及组件模块抽离
前端·javascript·vue.js
Qin_jiangshan1 小时前
vue实现进度条带指针
前端·javascript·vue.js
菜鸟una2 小时前
【layout组件 与 路由镶嵌】vue3 后台管理系统
前端·vue.js·elementui·typescript
小张快跑。2 小时前
【Vue3】使用vite创建Vue3工程、Vue3基本语法讲解
前端·前端框架·vue3·vite
Zhen (Evan) Wang2 小时前
.NET 8 API 实现websocket,并在前端angular实现调用
前端·websocket·.net
chenyuhao20242 小时前
链表面试题7之相交链表
数据结构·算法·链表·面试·c#
星空寻流年2 小时前
css3响应式布局
前端·css·css3