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

支付宝年终奖

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

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

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

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

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

更多详情请戳 这里

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

欢迎关注,明天见。

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

相关推荐
鱼跃鹰飞37 分钟前
大厂面试真题-简单说说线程池接到新任务之后的操作流程
java·jvm·面试
2401_865854881 小时前
iOS应用想要下载到手机上只能苹果签名吗?
后端·ios·iphone
清灵xmf1 小时前
在 Vue 中实现与优化轮询技术
前端·javascript·vue·轮询
大佩梨1 小时前
VUE+Vite之环境文件配置及使用环境变量
前端
GDAL1 小时前
npm入门教程1:npm简介
前端·npm·node.js
AskHarries1 小时前
Spring Boot集成Access DB实现数据导入和解析
java·spring boot·后端
2401_857622662 小时前
SpringBoot健身房管理:敏捷与自动化
spring boot·后端·自动化
程序员阿龙2 小时前
基于SpringBoot的医疗陪护系统设计与实现(源码+定制+开发)
java·spring boot·后端·医疗陪护管理平台·患者护理服务平台·医疗信息管理系统·患者陪护服务平台
程思扬2 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节
小白白一枚1112 小时前
css实现div被图片撑开
前端·css