← 返回目录

算法笔试模拟题精解之“相似数组”

第 11 / 74 卷日期:

算法笔试模拟题精解之“相似数组”

贡献者 | 张鹏飞

简介:要解出相似数组的最长长度,即要求相似数组中的每个元素尽可能的小,

把握这一点,结合下来的算法过程理解一下。

题目描述

等级:中等

知识点:贪心、尺取法

查看题目:相似数组

现在有两个数组 a 和 b,长度分别为 n 和 m。你可以对两者进行任意次数(包

括零次)的下述操作:

任选一段连续的区间 [l, r],将其替换为这段区间的所有数字的和。比如,对于

[1, 3, 4, 5, 11, 9],你可以选择区间 [3, 5],并将其替换为 4+5+11=20,操作后的数

组为 [1, 3, 20, 9]。

你现在需要通过上述操作将两个数组变成相同的数组,相同的定义是:对于两个

数组 a,b 必须长度相同,不妨设为 l,并且对于 1 <= i <= l,必有 a[i]=b[i]。

如果这两个数组可以变成相同的数组,那么我们称这两个数组是相似数组,否则

不是相似数组。我们并不在意操作的次数,我们只在意在这两个数组经过操作之后变

成相同数组的时候最长的长度是多少,如果它们本来不相似请输出 -1。

输入内容为四个部分,先两个数字 n、m(1 <= n, m <= 100000),分别表示数

组 a 和 b 的长度,再分别输入含有 n 个数字的数组 a 和含有 m 个数字的数组 b,其

中 1 <= a[i], b[i] <= 1000000000。

输出一个数字,表示最长的长度。

示例 1

输入:

5

4

[7,2,5, 11, 13]

[9 ,16 ,6 ,7 ]

输出:

3

解题思路

要解出相似数组的最长长度,即要求相似数组中的每个元素尽可能的小,把握这

一点,结合下文的算法过程理解一下。

设两个指针,分别指向数组 a 和 b 的第一个位置(即 i=0,j=0),定义两个变量,

分别表示数组 a 和 b 的当前区别的和(sum_a=a[0], sum_b=b[0]),然后遍历数组。

如果 sum_a==sum_b:

则结果加 1( 即 ans++),然后对两个指针分别加 1(i++, j++)。

判断:如果两个指针都等于各自数组的长度 ( 即 i==n&&j==m),则返回结果

(return ans);

如果两个指针仅有一个等于数组的长度(即 i=n || j=m),则返回 -1(表示不是相

似数组 );

如果以上两个条件都不满足 ( 即两个指针都小于数组长度 ),则当前区间和更新

为此时指向的元素 ( 即 sum_a=a[i], sum_b=b[j])。

如果 sum_a 则数组 a 的指针向前移动(即 i++),判断 i 是否越界 ( 即 i==n 为真

表示越界 ),如果越界,那么返回 -1( 表示不是相似数组 ),

如果没越界,给区别和加上当前元素 ( 即 sum_a+a[i])

如果 sum_a>sum_b:

则数组 b 的指针向前移动(即 j++),判断 j 是否越界 ( 即 j==m 为真表示越界 ),

如果越界,那么返回 -1( 表示不是相似数组 ),

如果没越界,给区别和加上当前元素 ( 即 sum_b+a[b])

重复以上过程,即可求解。

是不是有思路了呢,点击链接立刻答题:相似数组

全站分卷索引 · 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算法笔试模拟题精解之“滑雪比赛”