2026/1/15 9:02:44
网站建设
项目流程
建设网站天河区,织梦网站搬家数据库,回收类型网站如何做,做一个app融资需要多少钱哈喽各位#xff0c;我是前端小L。
场景想象#xff1a;
给你一个已经排好序的数组 [-4, -1, 0, 3, 10]。
我们要把每个数平方#xff0c;然后组成一个新的有序数组。 直觉做法#xff1a;先把每个数平方 [16, 1, 0, 9, 100]#xff0c;然后调用 sort() 排序。 问题我是前端小L。场景想象给你一个已经排好序的数组 [-4, -1, 0, 3, 10]。我们要把每个数平方然后组成一个新的有序数组。直觉做法先把每个数平方[16, 1, 0, 9, 100]然后调用sort()排序。问题sort()的复杂度是 $O(N \log N)$。面试官通常会问“能不能用 $O(N)$ 解决”思考数组其实已经“部分”有序了。负数部分越往左绝对值越大平方后越大。正数部分越往右绝对值越大平方后越大。也就是说最大的平方数一定是在数组的最左边或者最右边 不可能在中间。力扣 977. 有序数组的平方https://leetcode.cn/problems/squares-of-a-sorted-array/题目分析输入按非递减顺序排序的数组nums包含负数。输出每个数字的平方组成的新数组也要按非递减顺序排序。例子[-4, -1, 0, 3, 10]左边-4平方是16。右边10平方是100。100 16所以100肯定是新数组里的老大最后一名。核心思维左右夹逼 逆序填充既然最大的数一定在两头那我们就派出两个指针左指针 (left)指向开头处理负数。右指针 (right)指向结尾处理正数。结果指针 (k)指向新数组的最后一个位置因为我们要先找最大的填到最后去。操作逻辑比较nums[left]的平方和nums[right]的平方。谁大选谁。如果左边大把左边的平方填入结果数组的k位置left向右移。如果右边大把右边的平方填入结果数组的k位置right向左移。k指针向前移动一格准备填倒数第二大的数。当left right时结束。代码实现 (JavaScript)JavaScript/** * param {number[]} nums * return {number[]} */ var sortedSquares function(nums) { let n nums.length; // 创建一个等长的新数组用来存放结果 let result new Array(n); let left 0; let right n - 1; // k 指向结果数组的最后一个位置倒着填 let k n - 1; // 注意这里是 left right // 因为最后当 left right 时剩下的那个元素也要处理平方后填入 while (left right) { let leftSquare nums[left] * nums[left]; let rightSquare nums[right] * nums[right]; if (leftSquare rightSquare) { // 左边的平方更大填入末尾 result[k] leftSquare; left; // 左指针向内收缩 } else { // 右边的平方更大或相等填入末尾 result[k] rightSquare; right--; // 右指针向内收缩 } // 填完一个k 往前挪一位 k--; } return result; };深度模拟输入[-4, -1, 0, 3, 10]初始L0(-4),R4(10),k4。比较(-4)²16vs10²100。选右边。res[4] 100。R变成 3。k变成 3。状态[-4, -1, 0, 3],res[?, ?, ?, ?, 100]第二轮L0(-4),R3(3)。比较16vs9。选左边。res[3] 16。L变成 1。k变成 2。状态[-1, 0, 3],res[?, ?, ?, 16, 100]第三轮L1(-1),R3(3)。比较1vs9。选右边。res[2] 9。R变成 2。k变成 1。...以此类推直到填满。总结这道题展示了双指针处理有序数组的强大能力。只要看到“有序数组”或者“数组部分有序”且要求找“最大/最小/目标和”第一反应就应该是左右指针。关键技巧“从两头往中间找从后往前填结果”。下一题预告三数之和接下来我们要进入双指针专题的深水区了—— LC 15. 三数之和 (Medium)。这是大厂面试中出现频率最高的算法题之一绝对的 Top 5。题目给你一个数组判断是否存在三个数a, b, c使得a b c 0找出所有不重复的三元组。难点怎么把三数之和降维还是用双指针。怎么去重比如数组里有三个-1怎么保证不输出重复的结果这是最容易写出 Bug 的地方。准备好迎接这道必考题了吗