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

支付宝年终奖

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

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

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

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

  • 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...

更多详情请戳 这里

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

欢迎关注,明天见。

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

相关推荐
Summer不秃5 分钟前
Flutter之使用mqtt进行连接和信息传输的使用案例
前端·flutter
旭日猎鹰10 分钟前
Flutter踩坑记录(二)-- GestureDetector+Expanded点击无效果
前端·javascript·flutter
Viktor_Ye16 分钟前
高效集成易快报与金蝶应付单的方案
java·前端·数据库
hummhumm18 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
J老熊28 分钟前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
猿java33 分钟前
什么是 Hystrix?它的工作原理是什么?
java·微服务·面试
AuroraI'ncoding34 分钟前
时间请求参数、响应
java·后端·spring
乐闻x1 小时前
Vue.js 性能优化指南:掌握 keep-alive 的使用技巧
前端·vue.js·性能优化
好奇的菜鸟1 小时前
Go语言中的引用类型:指针与传递机制
开发语言·后端·golang
一条晒干的咸魚1 小时前
【Web前端】创建我的第一个 Web 表单
服务器·前端·javascript·json·对象·表单