首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

飞书,裁员1000人。。。

最近,我在网上逛的时候,看到一条消息——“飞书”,居然开始裁员了。更有网友直接发帖:“互联网果然是卸磨杀驴,飞书成型了就开始裁员了。”

评论区的网友们也是纷纷响应。有人挺赞同这种看法的:“那必须的,磨好了面粉,为啥还要让驴子继续跑?那面粉是老板的,可不是给驴子吃的。驴子还是那个驴子,可老板早不是当初那个磨面的老板了。”

也有人调侃道:“这不是叫你们平时多写点防御性的代码嘛。”哈哈,这笑话可并不好笑。

另一位网友则是有些无奈:“几千人弄个用户寥寥的产品,能撑到现在,也就靠着字节跳动财大气粗了。”

还有网友就很直接了:“飞书裁员一点都不意外吧?只不过是哪天裁不确定而已。”

评论区一通看下来,大多数都觉得飞书人太多、不好用、不盈利,加之大环境也不好,所以并不意外。反而觉得这么久了才爆发,字节是真有钱啊。

但是,其实也是能理解,大几千人做出来的东西却没多少人用,搁谁谁不急啊。就不难理解飞书大规模减负了,虽然这很残酷。那么你们怎么看呢?

下面是今日的大厂算法题

今日算法题,来自LeetCode的第35题:搜索插入位置,下面是我的算法思路及实现,让我们来看看吧。

# 算法题目

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

# 算法思路

二分查找算法的核心是每次查找都将搜索范围缩小为原来的一半,直到找到目标值或搜索范围为空。对于本题,我们可以稍微修改二分查找的逻辑,以定位目标值的插入位置:

初始化两个指针,left = 0 和 right = nums.length - 1。

当left <= right时,执行循环:

计算中间位置 mid = left + (right - left) / 2。

如果 nums[mid] 等于 target,直接返回 mid,表示找到了目标值的位置。

如果 nums[mid] 小于 target,说明目标值在 mid 右侧,将 left 更新为 mid + 1。

否则,nums[mid] 大于 target,说明目标值在 mid 左侧,将 right 更新为 mid - 1。

如果循环结束还没有找到目标值,此时 left 将指向目标值应该插入的位置。因为循环结束时,left 总是指向最后一次比较中 mid + 1 的位置,即第一个大于目标值的元素位置。

# 代码实现

Java实现

public int searchInsert(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; } else if (nums[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return left;}

JavaScript实现

function searchInsert(nums, target) { let left = 0, right = nums.length - 1; while (left <= right) { const mid = Math.floor((left + right) / 2); if (nums[mid] === target) { return mid; } else if (nums[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return left;}

Go实现

func searchInsert(nums []int, target int) int { left, right := 0, len(nums)-1 for left <= right { mid := (left + right) / 2 if nums[mid] == target { return mid } else if nums[mid] < target { left = mid + 1 } else { right = mid - 1 } } return left}

# 算法解析

本题通过二分查找算法,不仅能够高效地找到目标值存在的情况,还能在目标值不存在时,准确地给出其按顺序插入的位置。这体现了二分查找算法在处理有序数组查找问题时的强大能力和灵活性。

# 示例和测试

对于数组 nums = [1,3,5,6] 和目标值 target = 5,返回 2。

对于数组 nums = [1,3,5,6] 和目标值 target = 2,返回 1。

对于数组 nums = [1,3,5,6] 和目标值 target = 7,返回 4。

对于数组 nums = [1,3,5,6] 和目标值 target = 0,返回 0。

# 总结

通过这个问题的解决,我们可以看到二分查找不仅能用于查找操作,还能在查找失败时提供有价值的信息,比如元素应插入的位置。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OkozQbd-adQ_2aB9-ADnuz9g0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券