← 返回目录

算法笔试模拟题精解之“寻找等比数列”

第 20 / 74 卷日期:

算法笔试模拟题精解之“寻找等比数列”

贡献者 | 洪浩原

简介:最简单的方法,就是遍历数组中所有可能的三元组,逐个检验每组数是否

符合公比为 k 的等比数列的性质。对于较长的用例,这么做显然是超时的,不通过。

题目描述

等级:中等

知识点:DP

查看题目:寻找等比数列

Alice 和 Bob 都是数学高手,有一天 Alice 给了 Bob 一个长度为 n 的数组 a,

要求 Bob 在数组中找出 3 个数,要求三个数能够组成一个公比为 k 的等比数列,且

不改变三个数在数组 a 中的位置关系。

为了降低难度,Alice 只要求 Bob 回答数组 a 中有多少个这样的等比数列。

输入一个整数 n 表示数组长度、公比 k(1<=n,k<=2*10^5) 和包含 n 个数的数组

a(-10^9<=ai<=10^9)

输出一个数字,表示数组 a 中包含 Alice 要求的等比数列的数量。

示例 1

输入:

[1,1,2,2,4]

输出:

4

题解思路

方法 1:逐个遍历(超时)

最简单的方法,就是遍历数组中所有可能的三元组,逐个检验每组数是否符合公

比为 k 的等比数列的性质。

对于较长的用例,这么做显然是超时的,不通过。

时间复杂度:O(n^3)

空间复杂度:O(1)

方法 2:动态规划

本题充分利用下面两个隐藏规律,就可以使用动态规划:

  1. “长度为 3 的等比数列”,满足了动态规划的最优子结构性质

数列中每个数字只有 4 种可能的状态。其中带 * 号的状态可以同时存在,且靠后

的状态可以由前面的状态转换而来:

  • 同时属于一个或多个等比数列的第 1 项
  • 同时属于一个或多个等比数列的第 2 项
  • 同时属于一个或多个等比数列的第 3 项
  • 无法与前后数字组成任何等比数列
  1. “不允许调换顺序”,满足动态规划的子问题不重叠性和无后效性性质

表示数字处于上面哪种状态,完全由这个数字及其之前的数字决定,它的状态与

它后面数字的情形无关。

这就意味着,一次遍历,同时用 map 将每个遍历的数字归属到前面 4 种状态中

的 1 个或多个里。遍历结束,输出第 3 种状态“同时属于一个或多个等比数列的第 3

项”中含有的数字数,就完成了动态规划的过程。

时间复杂度:O(n)

空间复杂度:O(kn)

看完之后是不是有了答题思路了呢,快来练练手吧:寻找等比数列

全站分卷索引 · 74 卷
  1. 1一、算法思想
  2. 2算法笔试模拟题精解之“打怪兽”
  3. 31.2 贪心
  4. 4算法笔试模拟题精解之“最强的团队”
  5. 5算法笔试模拟题精解之“Tom 爱吃巧克力”
  6. 6算法笔试模拟题精解之“吃奶酪”
  7. 7算法笔试模拟题精解之“一的个数”
  8. 8算法笔试模拟题精解之“Bob 的花束”
  9. 9算法笔试模拟题精解之“钱庄”
  10. 10算法笔试模拟题精解之“移动射击”
  11. 11算法笔试模拟题精解之“相似数组”
  12. 12算法笔试模拟题精解之“过吊桥”
  13. 13算法笔试模拟题精解之“完美排列”
  14. 14算法笔试模拟题精解之“采摘圣诞果”
  15. 15算法比赛模拟题精解之“Tairitsu and Dynamic Objects”
  16. 16算法笔试模拟题精解之“Codancer 的炸弹引爆”
  17. 17算法笔试模拟题精解之“学习小组”
  18. 18算法笔试模拟题精解之“恢复字符串”
  19. 191.3 DP/ 动态规划
  20. 20算法笔试模拟题精解之“寻找等比数列”
  21. 21算法笔试模拟题精解之“字符配对”
  22. 22算法笔试模拟题精解之“数组染色”
  23. 23算法笔试模拟题精解之“连绵的群山”
  24. 24算法笔试模拟题精解之“难住Tom 的问题”
  25. 25算法笔试模拟题精解之“变化的字符”
  26. 26算法笔试模拟题精解之“跳房子”
  27. 27算法笔试模拟题精解之“寒假活动”
  28. 28算法笔试模拟题精解之“最短路”
  29. 29算法笔试模拟题精解之“codancer 上楼”
  30. 30算法笔试模拟题精解之“木棒拼接”
  31. 31算法笔试模拟题精解之“Codancer 的数组封印”
  32. 32算法笔试模拟题精解之“Jerry 的异或运算”
  33. 33算法笔试模拟题精解之“小明的数学作业”
  34. 34算法笔试模拟题精解之“奇偶数列”
  35. 351.4 剪枝
  36. 361.5 尺取法
  37. 37算法笔试模拟题精解之“调整数组”
  38. 38算法笔试模拟题精解之“最优分组”
  39. 39算法笔试模拟题精解之“破译密码”
  40. 40二、数据结构
  41. 412.2 搜索
  42. 42算法笔试模拟题精解之“能量半径”
  43. 43算法笔试模拟题精解之“苹果收获程序”
  44. 44算法笔试模拟题精解之“恐怖的辐射”
  45. 45算法笔试模拟题精解之“树的拆分”
  46. 46算法笔试模拟题精解之“Password”
  47. 47算法笔试模拟题精解之“神奇数字在哪里”
  48. 48算法笔试模拟题精解之“神奇的棋子”
  49. 492.3 树
  50. 50算法笔试模拟题精解之“Codancer 的旅行”
  51. 51算法笔试模拟题精解之“Codancer 的求和”
  52. 52算法笔试模拟题精解之“找出二叉搜索树的第2 大的数”
  53. 532.4 线型
  54. 54算法笔试模拟题精解之“最活跃的数”
  55. 55算法笔试模拟题精解之“非递减序列”
  56. 56算法笔试模拟题精解之“Tom 跳方格”
  57. 57算法笔试模拟题精解之“复杂的字符串”
  58. 58算法笔试模拟题精解之“神秘消失”
  59. 59三、计算
  60. 60算法笔试模拟题精解之“简单题?
  61. 61算法笔试模拟题精解之“朋友一生一起走”
  62. 62算法笔试模拟题精解之“正三角塔”
  63. 63算法笔试模拟题精解之“组队难题”
  64. 64算法笔试模拟题精解之“2n 合体”
  65. 65算法笔试模拟题精解之“平行线”
  66. 66算法笔试模拟题精解之“叠叠高”
  67. 67算法笔试模拟题精解之“公平”
  68. 68算法笔试模拟题精解之“Tom 的手工课”
  69. 69算法笔试模拟题精解之“填数问题”
  70. 70算法笔试模拟题精解之“Jerry 的考验”
  71. 71算法笔试模拟题精解之“超车”
  72. 72算法笔试模拟题精解之“坏掉的时钟”
  73. 73算法笔试模拟题精解之“期末考试”
  74. 74算法笔试模拟题精解之“滑雪比赛”