一.Leetcode题库第977题题目

977. 有序数组的平方

二.解法一——暴力解法

  1. 算法思路:for循环遍历数组,对数组元素做平方操作;调用sorted()函数对处理后的数组进行快速排序
  2. 算法时间复杂度:O(n + nlogn)
  3. 代码
class Solution(object):def sortedSquares(self, nums):""":type nums: List[int]:rtype: List[int]"""for i in range(len(nums)):nums[i]*=nums[i]nums=sorted(nums)return nums

三.解法二——双指针解法

  1. 解题逻辑:一个顺序数组中的负数元素平方后可能会比正数元素平方后更大,所以双指针从两端开始搜索可以保证较大值的准确性
  2. 算法思路 :初始化三个指针位置,一个指第一个元素为前指针,一个指最后一个元素为后指针,另一个指结果数组最后一个元素为结果指针;比较前后指针所指元素平方后的结果,取较大值存入结果指针位置,对应前(或后)指针执行后(或前)移一位的操作,结果指针前移一位,重复以上操作直至前后指针重合为止
  3. 详细代码:
class Solution(object):def sortedSquares(self, nums):""":type nums: List[int]:rtype: List[int]"""n=len(nums)# 初始化指针及结果数组before,after,result=0,n-1,n-1Result=[-1]*n # Result数组必须提前初始化,否则在赋值时会报错# 循环条件:两个指针重合while (before<=after):# 判断条件:前指针和后指针平方后的大小# 操作:取较大值赋给结果指针,同时指示较大值的指针向数组中间移动一位if nums[before]**2>nums[after]**2:Result[result]=nums[before]**2before+=1else:Result[result]=nums[after]**2after-=1result-=1return Result

四.总结

  1. 双指针法不一定必须是快慢两个指针,也有可能和二分查找一样是前后指针,但解决的关键在于找到判断条件从而确定移动操作
  2. 当题目对时间复杂度要求为O(n),对空间复杂度没有要求,且暴力解法需要双重循环还是一重循环加一个其他排序方法时,则考虑使用双指针法进行解决

题解——两种算法解Leetcode题库第977题(暨双指针法小结)相关推荐

  1. 剪拼子字符串——常规、另类两种算法解CSDN竞赛第八期第一小题

    [点击此处跳转笔记正文] Python 官网:https://www.python.org/ Free:大咖免费"圣经"教程< python 完全自学教程>,不仅仅是基 ...

  2. python【力扣LeetCode算法题库】42-接雨水(双指针法)

    42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这 ...

  3. LeetCode题库第1题 两数之和

    两数之和 LeetCode题库第1题 两数之和 看到题,我就想到了暴力法: public int[] force(int[] nums,int target) {for (int i = 0; i & ...

  4. 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)

    图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS) 阅读本文前,请确保你已经掌握了递归.栈和队列的基本知识,如想掌握搜索的代码实现,请确保你能够用代码实现栈和队列的基本操作. 深度优先遍 ...

  5. 二分查找理论(三种问题类型、两种算法形式)

    从这篇文章开始,我将开启算法专栏,记录在刀砍leetcode算法过程中的理论总结与实战代码,我认为二分算法是算法问题中细节最多的部分,所以我先拿它开刀!二分题目实战请看我的二分查找专栏:二分查找实战专 ...

  6. LeetCode题库第867题 转置矩阵

    LeetCode题库第867题 转置矩阵 LeetCode题库第867题 转置矩阵 我首先想到的方法是新建一个二维的矩阵,然后遍历原来的矩阵,将每一个元素放在新矩阵中该放的位置: // javapub ...

  7. LeetCode题库第888题 公平的糖果棒交换

    LeetCode题库第888题 公平的糖果棒交换 LeetCode第888道题 公平的糖果棒交换 首先,题目中说他们两个人的糖果的总数量是不一样的,并且要将A中的一个糖果和B的一个糖果交换后使得他们两 ...

  8. 决策树ID3、C4.5这两种算法的特点?为什么使用C4.5要好?

    ID3.C4.5这两种算法的特点?为什么使用C4.5要好? 参考:链接 [参考文章] [1]. <机器学习> p73–p79 见附件书本 [2]. C4.5算法详解 https://blo ...

  9. 欧拉回路/路径浅谈(七桥问题,两种算法)

    文章目录 前言 引子 欧拉回路/路径 定义 欧拉路径 欧拉回路 无向图(连通) 欧拉回路-无向 欧拉路径-无向 有向图(连通) 欧拉回路-有向 欧拉路径-有向 注意事项 算法 Fluery算法 Hie ...

最新文章

  1. python闭包锁住女神的心
  2. 全球及中国多功能小推车行业消费需求与未来产销前景分析报告2022版
  3. python环境变量的配置 alias_vim-python环境配置
  4. 论文小综 | Pre-training on Graphs
  5. RS-232 vs. TTL Serial Communication(转载)
  6. leetcode127. Word Ladder
  7. Safetype Config使用
  8. Android之——图片的内存优化
  9. 《SEO实战密码》读后一点感受
  10. 怎样才算优秀的xyz员
  11. python+iOS自动化环境搭建
  12. PDP context激活的大致原理
  13. struggle in the ACM(一)
  14. 始料未及-- 元宇宙传来好消息,全球轰动
  15. 推荐一款适用于vue的h5富文本编辑器
  16. OC加强(三)之protocol(协议)/代理
  17. 作为程序员,你关注哪些国外 IT 网站?
  18. (解决 fatal error C1083: 无法打开包括文件:“xxxxxxxxx.h”: No such file or directory)VS和Eclipse添加新文件/文件夹路径步骤
  19. JS DOM之DOM遍历
  20. 林家翘先生提醒青年学者:千万不要Garbage in,garbage out

热门文章

  1. mac终端(terminal)里的快捷键
  2. node写数据并实现数据跨域(不是用插件解决的)
  3. 《重新定义团队》读书笔记及阅读感想2600字
  4. 【51单片机】:智能台灯设计(自动、手动双模式)
  5. 云课堂-java-jvm学习总结
  6. 大数据项目篇--电商用户画像
  7. 微信小程序——引用阿里云字体
  8. Linux 系统优化相关经验总结
  9. 20175227张雪莹 2018-2019-2 《Java程序设计》第十一周学习总结
  10. 约翰-聂夫的投资原则