美团员工福利上新,开水团开始加糖了?

文摘   2024-11-04 14:08   湖北  
这是苍何的第 219 篇原创!

大家好,我是苍何。

在脉脉上看到这条热搜感觉挺有意思的,正直找工作季节,觉得有必要给大家分享一下。

美团为啥一直被人称为开水团呢?

这是因为美团的福利,据说从来就只有办公区的白开水😂。

但现在据爆料,美团福利上新了,开水团的优惠不再只有开水了。

开水团这两天在内部上线了两项面向员工的专属优惠:

1、推出 5 折员工单车骑行卡,开水团员工骑小单车直接五折。

2、员工每个月只需要花费 1 块钱就可领取价值 100 元的「神会员」省钱包。

虽说加糖力度一般,但总比天天免费的白开水来的实在些。

我觉得大厂完全可以将自己的产品让利给自家员工,比如 QQ 音乐就直接送会员,王者荣耀就直接送皮肤,饿了么就直接送外卖券,京东就直接送 plus 会员。。。

这也算是薪资外的一份福利吧,对加强企业归属感还是蛮重要的。

另外美团这两天也开奖了,北京后端开发岗,base 给到 23 -25 K。

好啦,关于开水团福利上新这事,你怎么看?欢迎评论区讨论。

...

回归主题。

今天来一道华为鸿蒙开发考过的一道面试算法题,给枯燥的牛马生活加加油😂。

题目描述

平台:LeetCode

题号:33

题目名称:搜索旋转排序数组

在一个升序排列的整数数组 nums 中,每个数的值互不相同。假设在某个未知的下标 k 处对数组进行了旋转,使得数组从 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]] 的形式排列。

例如,给定数组 [0,1,2,4,5,6,7] 在下标 k=3 处旋转后,可能变为 [4,5,6,7,0,1,2]

给定这样的一个旋转后的数组 nums 和一个目标值 target,如果 nums 中存在该目标值 target,返回它的下标;否则,返回 -1。

要求算法的时间复杂度必须为 O(log n)

示例

示例 1:

输入: nums = [4,5,6,7,0,1,2], target = 0
输出: 4

示例 2:

输入: nums = [4,5,6,7,0,1,2], target = 3
输出: -1

示例 3:

输入: nums = [1], target = 0
输出: -1

提示

  • 1 <= nums.length <= 5000

  • -10^4 <= nums[i] <= 10^4

  • 数组中的每个值互不相同

  • -10^4 <= target <= 10^4

解题思路

由于数组被旋转过,但整体上仍然是部分有序的,因此可以通过二分查找法来实现 O(log n) 的时间复杂度。二分查找的核心在于每次判断中点的两边哪一侧是有序的,进而确定目标值 target 的可能位置范围。

  1. 初始化两个指针 leftright,分别指向数组的开头和末尾。

  2. 计算中间位置 mid,判断 nums[mid] 是否等于 target,如果相等则直接返回 mid

  3. 如果 nums[left]nums[mid] 有序:

  • 检查 target 是否在 nums[left]nums[mid] 之间。

  • 如果在此区间,则更新 right,否则更新 left

  • 如果 nums[mid]nums[right] 有序:

    • 检查 target 是否在 nums[mid]nums[right] 之间。

    • 如果在此区间,则更新 left,否则更新 right

  • 重复上述过程,直到找到目标或指针交错。

  • 如果循环结束后没有找到目标,返回 -1。

  • 代码实现

    Java 代码

    public class Solution {
    public int search(int[] nums, int target) {
    int left = 0, right = nums.length - 1;
    while (left <= right) {
    int mid = left + (right - left) / 2;
    if (nums[mid] == target) {
    return mid;
    }
    // 判断左半部分是否有序
    if (nums[left] <= nums[mid]) {
    // target 在左半部分范围内
    if (nums[left] <= target && target < nums[mid]) {
    right = mid - 1;
    } else {
    left = mid + 1;
    }
    } else {
    // 右半部分有序
    if (nums[mid] < target && target <= nums[right]) {
    left = mid + 1;
    } else {
    right = mid - 1;
    }
    }
    }
    return -1;
    }
    }

    C++代码

    #include <vector>
    using namespace std;

    class Solution {
    public:
    int search(vector<int>& nums, int target) {
    int left = 0, right = nums.size() - 1;
    while (left <= right) {
    int mid = left + (right - left) / 2;
    if (nums[mid] == target) {
    return mid;
    }
    // 左半部分有序
    if (nums[left] <= nums[mid]) {
    if (nums[left] <= target && target < nums[mid]) {
    right = mid - 1;
    } else {
    left = mid + 1;
    }
    } else { // 右半部分有序
    if (nums[mid] < target && target <= nums[right]) {
    left = mid + 1;
    } else {
    right = mid - 1;
    }
    }
    }
    return -1;
    }
    };

    Python 代码

    from typing import List

    class Solution:
    def search(self, nums: List[int], target: int) -> int:
    left, right = 0, len(nums) - 1
    while left <= right:
    mid = left + (right - left) // 2
    if nums[mid] == target:
    return mid
    # 左半部分有序
    if nums[left] <= nums[mid]:
    if nums[left] <= target < nums[mid]:
    right = mid - 1
    else:
    left = mid + 1
    # 右半部分有序
    else:
    if nums[mid] < target <= nums[right]:
    left = mid + 1
    else:
    right = mid - 1
    return -1

    复杂度分析

    • 时间复杂度:O(log n),由于我们每次都将搜索范围缩小一半。

    • 空间复杂度:O(1),只使用了常数空间。

    ending

    你好呀,我是苍何。是一个每天都在给自家仙人掌讲哲学的执着青年,我活在世上,无非想要明白些道理,遇见些有趣的事。倘能如我所愿,我的一生就算成功。共勉 💪

    点击关注下方账号,你将感受到一个朋克的灵魂,且每篇文章都有惊喜。

    感谢大家一直以来的阅读、在看和转发,我会把流量主收益都用来发红包,大家可在公众号页面发送相关暗号关键词获取抽奖,每一篇文章会给到一个不同的暗号,对应的抽奖都是独立的,此篇暗号为【开水团】,在后台回复【开水团】,即可点击进去参与抽奖!抽奖内容、金额、个数等都无变化,在开奖前参与抽奖,操作均有效。

    注意,后台(不是评论区,是后台)回复【开水团】即可参与抽奖。
    后台回复(不是评论区,是后台)即可参与抽奖。
    后台回复(不是评论区,是后台)即可参与抽奖。

    就像大家之前回复【八股】一样。

    【我爱这个魔幻的世界】

    苍何
    独立开发者,专注于Java企业级开发,AI 工具提效。偶尔闪光、经常表达、总是真诚。
     最新文章