大连网站建设渠道,建设一个下载资料的网站,wordpress ddos 2014,精彩 网站理想年终奖红包 2月5日#xff0c;有微博用户发帖称#xff0c;脉脉上看到#xff0c;今年理想汽车的年终奖红包有点大。 对此#xff0c;李想转发并评论#xff1a; ❝ 不能只学华为的流程#xff0c;而不学华为的利益分配。奖罚不分明#xff0c;是组织低效的最大原因… 理想年终奖红包 2月5日有微博用户发帖称脉脉上看到今年理想汽车的年终奖红包有点大。 对此李想转发并评论 ❝ 不能只学华为的流程而不学华为的利益分配。奖罚不分明是组织低效的最大原因。有成长、有成就、有回报三者缺一不可。 由此可见华为的狼性文化虽然被无数打工人所诟病但还是被很多创业公司拿去借鉴的。 更残忍的是像李想这样有悟性的老板还是少数。 大多创始人都是只抄流程不抄分配。 更甚者不学分配就算了PUA 员工的时候还不忘把「像华为、学华为」这样的词挂嘴边。 ... 回归主线。 来一道和理想汽车面试相关的算法题。 根据我们统计过的「理想汽车」面试算法题都是比较简单的。 题目描述 平台LeetCode 题号2824 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target。 请你返回满足 0 i j n 且 nums[i] nums[j] target 的下标对 的数目。 示例 1 输入nums [-1,1,2,3,1], target 2输出3解释总共有 3 个下标对满足题目描述- (0, 1) 0 1 且 nums[0] nums[1] 0 target- (0, 2) 0 2 且 nums[0] nums[2] 1 target - (0, 4) 0 4 且 nums[0] nums[4] 0 target注意 (0, 3) 不计入答案因为 nums[0] nums[3] 不是严格小于 target 。 示例 2 输入nums [-6,2,5,-2,-7,-1,3], target -2输出10解释总共有 10 个下标对满足题目描述- (0, 1) 0 1 且 nums[0] nums[1] -4 target- (0, 3) 0 3 且 nums[0] nums[3] -8 target- (0, 4) 0 4 且 nums[0] nums[4] -13 target- (0, 5) 0 5 且 nums[0] nums[5] -7 target- (0, 6) 0 6 且 nums[0] nums[6] -3 target- (1, 4) 1 4 且 nums[1] nums[4] -5 target- (3, 4) 3 4 且 nums[3] nums[4] -9 target- (3, 5) 3 5 且 nums[3] nums[5] -3 target- (4, 5) 4 5 且 nums[4] nums[5] -8 target- (4, 6) 4 6 且 nums[4] nums[6] -4 target 提示 基本分析 为了方便先对 nums 进行排序。 当 nums 有了有序特性后剩下的便是「遍历右端点在右端点左侧找最大合法左端点」或「遍历左端点在左端点右侧找最大合法右端点」过程。 排序 二分 这是一种「遍历右端点在右端点左侧找最大合法左端点」做法。 遍历右端点 i然后在 范围内进行二分找到最大的满足 的位置 j。 若存在这样左端点 j说明以 为右端点时共有 个范围为 个合法左端点需要被统计。 Java 代码 class Solution { public int countPairs(ListInteger nums, int target) { Collections.sort(nums); int n nums.size(), ans 0; for (int i 1; i n; i) { int l 0, r i - 1; while (l r) { int mid l r 1 1; if (nums.get(mid) nums.get(i) target) l mid; else r mid - 1; } if (nums.get(r) nums.get(i) target) ans r 1; } return ans; }} C 代码 class Solution {public: int countPairs(vectorint nums, int target) { sort(nums.begin(), nums.end()); int n nums.size(), ans 0; for (int i 1; i n; i) { int l 0, r i - 1; while (l r) { int mid l r 1 1; if (nums[mid] nums[i] target) l mid; else r mid - 1; } if (nums[r] nums[i] target) ans r 1; } return ans; }}; Python 代码 class Solution: def countPairs(self, nums: List[int], target: int) - int: nums.sort() n, ans len(nums), 0 for i in range(1, n): l, r 0, i - 1 while l r: mid l r 1 1 if nums[mid] nums[i] target: l mid else: r mid - 1 if nums[r] nums[i] target: ans r 1 return ans TypeScript 代码 function countPairs(nums: number[], target: number): number { nums.sort((a,b)a-b); let n nums.length, ans 0; for (let i 1; i n; i) { let l 0, r i - 1; while (l r) { const mid l r 1 1; if (nums[mid] nums[i] target) l mid; else r mid - 1; } if (nums[r] nums[i] target) ans r 1; } return ans;}; 时间复杂度排序复杂度为 构造答案复杂度为 。整体复杂度为 空间复杂度 排序 双指针 这是一种「遍历左端点在左端点右侧找最大合法右端点」做法。 使用 l 和 r 分别指向排序好的 nums 的首尾。 若当前 说明此时对于 l 来说r 并不合法对 r 自减左移。 直到满足 此时对于 l 来说找到了最右侧的合法右端点 r在 期间的数必然仍满足 共有 个范围为 个合法右端点需要被统计。 Java 代码 class Solution { public int countPairs(ListInteger nums, int target) { Collections.sort(nums); int n nums.size(), ans 0; for (int l 0, r n - 1; l r; l) { while (r 0 nums.get(l) nums.get(r) target) r--; if (l r) ans r - l; } return ans; }} C 代码 class Solution {public: int countPairs(vectorint nums, int target) { sort(nums.begin(), nums.end()); int n nums.size(), ans 0; for (int l 0, r n - 1; l r; l) { while (r 0 nums[l] nums[r] target) r--; if (l r) ans r - l; } return ans; }}; Python 代码 class Solution: def countPairs(self, nums: List[int], target: int) - int: nums.sort() n, ans len(nums), 0 l, r 0, n - 1 while l r: while r 0 and nums[l] nums[r] target: r - 1 if l r: ans r - l l 1 return ans TypeScript 代码 function countPairs(nums: number[], target: number): number { nums.sort((a,b)a-b); let n nums.length, ans 0; for (let l 0, r n - 1; l r; l) { while (r 0 nums[l] nums[r] target) r--; if (l r) ans r - l; } return ans;}; 时间复杂度排序复杂度为 构造答案复杂度为 。整体复杂度为 空间复杂度 我是宫水三叶每天都会分享算法题解并和大家聊聊近期的所见所闻。 欢迎关注明天见。 更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地