【求问帖】数组相邻元素最大公约数不断替换直到所有元素为1 - 最少步骤数

这是一个算法问题,要求在序列中不断用相邻元素的最大公约数替换,直到所有元素变为1,输出最少替换次数。若无法全部变为1,则返回-1。问题涉及到动态规划,但作者对于如何构建状态和解决子问题感到困惑。给出的例子说明了问题的输入输出形式,并表达了对高效解法的寻求。
摘要由CSDN通过智能技术生成

给一组序列,求其中相邻两个元素之间的最大公约数且替换掉其他一个。一直不停求下去直到所有元素被替换为1. 求需要最少替换多少次能完成?
如果实在不能全部替换,则返回-1。

输入的第一行为元素个数 n ,第二行为序列arr。 输出为替换元素的次数


Example1

Input:

4
4 1 3 5

Output

3

解释:4和1的最大公约数是1,4替换成1 -> [1 1 3 5], 以此类推替换掉3和5,总共3次。


Example2:

Input:

5
10 20 30 40 50

Output:

-1

上面的题目是今天模拟考的一道算法题,限时半小时。

思路:

很明显如果序列里出现1,这个序列就一定能全部转为1,因为1和任何数的公约数都为1。

  1. 那么最先设立的一个初始筛选条件就是检测输入序列里是否有1,如果有就设一个变量num记录序列里面1的个数,返回 n-num就是答案。

  2. 如果初始序列里没有1,那么我们就需要求相邻数的公约数,一旦成功把其中一个元素替换为1,把这之前的替换步骤数(count)记录下来,我们就能够成功利用刚刚所说的就能立即出答案来计算出最终答案。也即是n-count+1. (1 是1的个数&

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值