首页 > 编程语言 >day02 代码随想录算法训练营 977. 有序数组的平方

day02 代码随想录算法训练营 977. 有序数组的平方

时间:2023-12-29 16:12:11浏览次数:48  
标签:977 平方 right nums day02 随想录 数组 new left

题目:

977. 有序数组的平方

我的感悟:

  • 这道题,仔细观察,平方后两头的大。
  • 用双指针,取两头,放到新的数组里。
  • 新数组要求排序
  • 所以,新的数组从后往前放

理解难点:

  • 无他,多练习。

代码难点:

总结概括:

  • 双指针

代码示例:

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        # 仔细观察这个数组
        # 平方后,两头的大
        # 那么就可以用左右两个指针,往中间遍历,然后比较大小,放到新的数组里
        # 新的数组从后往前放,就不用排序了.
        left = 0
        right = len(nums) - 1 
        new_nums = [0] * len(nums)  # 存新的结果
        k = len(nums) - 1 
        
        while left <= right:
            if nums[left]**2 > nums[right]**2:  # 左边的大
                new_nums[k] = nums[left]**2 # 把大的放到新的数组里的最后
                k-=1
                left+=1
            else:   # 否则就是右边的大
                new_nums[k] = nums[right] ** 2
                k -=1
                right -=1
        return new_nums

通过截图:

资料:

题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/

文章讲解:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html

视频讲解: https://www.bilibili.com/video/BV1QB4y1D7ep

标签:977,平方,right,nums,day02,随想录,数组,new,left
From: https://www.cnblogs.com/liqi175/p/17935117.html

相关文章

  • day01 代码随想录算法训练营 27. 移除元素
    题目:27.移除元素感悟:用快慢指针。本题是要原地删除。而删除这个行为在真实的计算机的数组里,是覆盖。所以,就用两个指针,(人)一个跑的快,一个跑的慢。他们身上带了个对讲机。跑的快的那个人负责检测后面的数字符合要求不,比如,要不等于3的,遇到一个2,告诉跑的慢的说2符合要求。遇......
  • 代码随想录算法训练营第十六天 |104.二叉树的最大深度,559.n叉树的最大深度,111.二叉树
    一、104.二叉树的最大深度题目链接:LeetCode104.二叉树的最大深度学习:思路:分别求左子树和右子树的高度,返回给根结点,加1之后是根结点的深度,这是后序遍历的思路二、559.n叉树的最大深度题目链接:LeetCode559.N叉树的最大深度学习前:思路:后序遍历。分别所有孩子结点的深......
  • 代码随想录day 02 双指针 滑动窗口 螺旋矩阵
    有序数组的平方题目如下:如果是可以使用O(nlogn)或以上复杂度的算法,本题可以简单的先平方一遍,然后使用排序算法就可以了但是要求使用O(n)复杂度的算法,那么我首先想到的是昨天的快慢指针类似的想法:我想先平方一次数组,然后从中间开始排序,如下但是运行之后发现从中间开始进行相邻元......
  • day01 代码随想录算法训练营 704. 二分查找
    题目:leetcode704.二分查找 感悟:困扰我多年的二分查找对于边界的判断,我终于理解了。难点:难点1:定边界rightright=len(nums)还是len(nums)-1 难点2:while循环whileleft<right还是left<=right 难点3:mid取值mid=right-1还是mid=right  结论:1.自己确定......
  • 代码随想录算法训练营第十五天 | 层序遍历 ,226.翻转二叉树,101.对称二叉树
    一、二叉树层序遍历题目链接:LeetCode102.二叉树的层序遍历LeetCode107.二叉树的层序遍历IILeetCode199.二叉树的右视图LeetCode637.二叉树的层平均值LeetCode429.N叉树的层序遍历LeetCode515.在每个树行中找最大值LeetCode116.填充每个节点的下一个右侧节......
  • 代码随想录day 01 二分法与快慢指针
    二分法题目:实现代码如下:值得注意的是实现的方法是利用左闭右开区间还是左闭右闭区间根据选择的不同,判断条件不同将迭代的值带入到条件看符不符合区间要求就不会混淆二者快慢指针题目:本题实际上可以通过二重for循环暴力求解,复杂度是O(n^2)但是测试过程中发现超时遂放弃......
  • 代码随想录算法训练营第十四天 | 二叉树理论基础,递归遍历,分别迭代遍历, 统一迭代遍历
    一、二叉树理论基础学习:1.从二叉树是否包含数值进行分类:无数值:完全二叉树和满二叉树有数值的:二叉搜索树和平衡二叉搜索树(AVL,Adelson-VelskyandLandis)。其中二叉搜索树指数值按照从小到大的顺序是左子树<根结点<右子树,平衡指的是左右子树高度差不超过12.二叉树存......
  • 代码随想录算法训练营第二天 | 239. 滑动窗口最大值,347.前 K 个高频元素
    一、239.滑动窗口最大值题目链接:LeetCode239.滑动窗口最大值学习前:思路:无学习后:自定义双端队列,实现push、pop、peek方法,使得队列单调非增。peek方法不变;当入队时,若当前元素比队尾元素大,则pop队尾,直到队列为空或当前元素不大于队尾元素;当出队时,若队列非空且队首元素和窗......
  • 代码随想录算法训练营第十一天|20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150
    一、20.有效的括号题目链接:LeetCode20.有效的括号学习前:思路:当前元素为左括号,直接入栈当前元素为右括号,若找到对应的左括号匹配,则循环继续;反之返回false若栈为空,返回true;反之false时间复杂度:O(n)空间复杂度:O(n)学习后:采用入栈右括号,降低复杂度。即当遇到左......
  • 代码随想录算法训练营第十天 | 栈与队列理论基础,232.用栈实现队列,225.用队列实现栈
    一、栈与队列理论基础学习:1.定义栈先进后出队列先进先出2.底层实现均可以通过数组或链表进行实现二、232.用栈实现队列题目链接:LeetCode232.用栈实现队列学习前:思路:无学习后:不同方法有部分功能实现是一致的,则可以进行抽象提取,实现复用性两个栈实现队列时......