首页 > 编程语言 > 详细

算法基础——双指针练习

时间:2021-06-07 00:42:09      阅读:19      评论:0      收藏:0      [点我收藏+]

双指针练习

一、完美数列(PAT乙级1030)

  技术分享图片

 

 下面是书中代码

技术分享图片

 

 算法思想

  首先使数列有序,对于有序递增的数列,可以得出a[j]<=a[i]*p成立,那么在i到j这个递增区间中的所有数都对这个等式成立,也就是说一次性找到一个区间,这个区间中都是符合a[j]<=a[i]*p的数,i为区间开始的元素,也是区间中最小的元素,i~j是递增的,所以一定可以找到这个区间的右边界,此时区间中的数就都是符合要求的,然后让i++找下一个区间。

 

这种方法类似于一个可改变大小的滑动窗口,每次确定窗口的左边界,然后找符合要求的右边界。因为要找出最大的那个窗口,所以count的赋值需要借助于max函数,用三目表达式也行技术分享图片使用三目表达式方法。

 

算法分析

  即使使用最快的排序算法时间复杂度也有O(nlogn)而且还有一次数组的遍历操作O(n),所以最终时间复杂度为O(nlogn),根据题意分析这道题的最好时间复杂度应该就是O(nlogn)

 

算法基础——双指针练习

原文:https://www.cnblogs.com/zyq79434/p/14856706.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!