给帅哥做奴视频网站地址,我爱建站免费空间,全国工商核名查询系统官网,江苏省建设厅网站培训网大厂工时爆料 今天逛脉脉的时候#xff0c;看到一篇名为「一人一句#xff0c;大厂工时爆料」的帖子#xff1a; 点开之后#xff0c;我沉默了 ... 出来爆料的基本上都是 10 小时。 好奇心之下#xff0c;我搜索了一下去年很热的排行榜#xff1a; 2023 年最新互联网公司… 大厂工时爆料 今天逛脉脉的时候看到一篇名为「一人一句大厂工时爆料」的帖子 点开之后我沉默了 ... 出来爆料的基本上都是 10 小时。 好奇心之下我搜索了一下去年很热的排行榜 2023 年最新互联网公司工作时长排行榜来源网络 好家伙依然稳定。 如果是偶尔赶项目加班一下能理解去年周工作时长已经长达 60 小时今年还被爆料日均 10 个小时说明内卷已经成为日常了。 过去几年各行各业都羡慕计算机行业但大多围城外的人只看到巨额年终而看不到超低时薪。 对此你怎么看欢迎新建「匿名身份」在评论区爆料你的工时貌似还很多同学不知道公众号新出的这功能有段时间了 ... 回归主题。 来一道不算容易的和「字节跳动社招四面」相关的题目。 题目描述 平台LeetCode 题号862 给你一个整数数组 nums 和一个整数 k 找出 nums 中和至少为 k 的最短非空子数组并返回该子数组的长度。 如果不存在这样的子数组返回 -1 。 子数组是数组中连续的一部分。 示例 1 输入nums [1], k 1输出1 示例 2 输入nums [1,2], k 4输出-1 示例 3 输入nums [2,-1,2], k 3输出3 提示 前缀和 离散化 权值树状数组 由于求解的对象是子数组容易联想到求连续段之和容易联想到「前缀和」假设我们预处理出的前缀和数组为 sum为了方便我们令前缀和数组坐标从 1 开始。 即每个 而言本质上是找满足「 」条件的最大下标 j其中 j 的取值范围为 从而知道以 i 作为右端点时满足条件的最短子数组长度为 。 先考虑存在负数域的问题由于我们需要使用 以及对应的 同时 k 的取值为 过大我们可以通过「离散化」手段将其映射到 2 倍的数组长度即大小为 的正数域。 随后来考虑如何求解「满足条件的最大下标」问题可以通过「权值树状数组」来做对于每个 而言我们利用「权值树状数组」来维护满足大于等于 的最大下标。起始我们先初始化树状数组为 -1遍历过程中查询是否存在满足条件的下标若不为 -1 则更新 ans并更新权值树状数组对应的最大下标即可。 Java 代码 class Solution { static int N 200010; static int[] tr new int[N], sum new int[N]; int n, m, ans; int lowbit(int x) { return x -x; } void update(int val, int loc) { for (int i val; i m; i lowbit(i)) tr[i] Math.max(tr[i], loc); } int query(int x) { int ans -1; for (int i x; i 0; i - lowbit(i)) ans Math.max(ans, tr[i]); return ans; } int getIdx(ListLong list, long x) { int l 0, r list.size() - 1; while (l r) { int mid l r 1; if (list.get(mid) x) r mid; else l mid 1; } return r 1; } public int shortestSubarray(int[] nums, int k) { n nums.length; m 2 * n 10; ans n 10; Arrays.fill(tr, -1); long[] temp new long[m]; ListLong list new ArrayList(); list.add(0L); for (int i 1; i 2 * n 1; i) { if (i n) temp[i] temp[i - 1] nums[i - 1]; else temp[i] temp[i - (n 1)] k; list.add(temp[i]); } Collections.sort(list); for (int i 0; i 2 * n 1; i) sum[i] getIdx(list, temp[i]); update(sum[n 1], 0); for (int i 1; i n; i) { int j query(sum[i]); if (j ! -1) ans Math.min(ans, i - j); update(sum[n 1 i], i); } return ans n 10 ? -1 : ans; }} C 代码 class Solution {public: static const int N 200010; vectorint tr, sum; int n, m, ans; int lowbit(int x) { return x -x; } void update(int val, int loc) { for (int i val; i m; i lowbit(i)) tr[i] max(tr[i], loc); } int query(int x) { int ans -1; for (int i x; i 0; i - lowbit(i)) ans max(ans, tr[i]); return ans; } int shortestSubarray(vectorint nums, int k) { n nums.size(); m 2 * n 10; ans n 10; tr.resize(m, -1); sum.resize(m 10, 0); vectorlong long temp(m); vectorlong long list; for (int i 1; i 2 * n 1; i) { if (i n) temp[i] temp[i - 1] nums[i - 1]; else temp[i] temp[i - (n 1)] k; list.push_back(temp[i]); } sort(list.begin(), list.end()); for (int i 0; i 2 * n 1; i) { sum[i] lower_bound(list.begin(), list.end(), temp[i]) - list.begin() 1; } update(sum[n 1], 0); for (int i 1; i n; i) { int j query(sum[i]); if (j ! -1) ans min(ans, i - j); update(sum[n 1 i], i); } return ans n 10 ? -1 : ans; }}; 时间复杂度预处理前缀和的的复杂度为 排序并进行离散化的复杂度为 构造答案的复杂度为 。整体复杂度为 空间复杂度 最后 给大伙通知一下 全网最低价 LeetCode 会员目前仍可用 ~ 年度有效期加赠两个月; 季度有效期加赠两周 年度获 66.66; 季度获 22.22 年度参与当月丰厚专属实物抽奖中奖率 30%) 专属链接leetcode.cn/premium/?promoChannelacoier 我是宫水三叶每天都会分享算法知识并和大家聊聊近期的所见所闻。 欢迎关注明天见。 更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地