当前位置: 首页 > 知识库问答 >
问题:

寻找从x到y的最小操作

汪翰墨
2023-03-14

还在纠结递归。我有一个代码,它应该让我得到最少的操作,以便从x到y。只有乘以2或加+1,例如从7到12...它的5次操作,因为你需要+1次。我的代码对我来说没有正确的工作,我无法找出我缺少了什么来保证它是正确的。

public static int minOps(int x,int y)
{
    if (x >= y) return 0;
        int add = 1 + minOps(x + 1, y);
        int mul = 1 + minOps(x * 2, y);
    return Math.min(add, mul);
}

共有1个答案

侯焱
2023-03-14

@Arjunkhera的答案思路很对--当你超调时返回一个“可怕”的结果,所以你从来不选择它--但需要避免在结果加1时潜在的溢出:

public static int minOps(int x,int y)
{
    // Return 1 less that MAX_VALUE, so adding 1 doesn't overflow.
    // You'll never get as far as here anyway, your stack will overflow long
    // before, so subtracting 1 makes no practical difference.
    if (x > y) return Integer.MAX_VALUE - 1;
    if (x >= y) return 0;

    int add = 1 + minOps(x + 1, y);
    int mul = 1 + minOps(x * 2, y);
    return Math.min(add, mul);
}
 类似资料:
  • 我有一个由最小生成树表示的边加权无向图。每个垂直由一个整数表示。MST如下所示: 我想知道,如何使用这个MST来找到从顶点x到顶点y的最短路径?假设我想找到从0到3的最短路径。很容易看到路径是0-2,2-3,总权重为0.26 0.17=0.43。但是我应该如何构造一个通用的方法来实现这一点?在伪码中

  • 给定一个由N个正整数组成的数组,从索引0到N-1,我如何才能找到一个长度为K且范围尽可能小的连续子数组。换句话说,最大(子阵列)-最小(子阵列)是最小化的。如果有多个答案,任何答案都可以。 例如,从[4,1,2,6]中找到最小范围的长度为2的子数组 答案是[1,2],因为2-1=1给出了所有可能的连续子数组的最小范围。 其他子阵列有[4,1](范围3),[2,6](范围4) 我正在使用python

  • 下面是寻找最小跳跃次数的算法谜题。发布了详细的问题声明和两个代码版本来解决这个问题。我做了测试,似乎两个版本都可以工作,我的第二个版本是版本一代码的优化版本,这使得我从开始,而不是持续增加,这可以通过不迭代所有的插槽来节省时间数组。 我的问题是,想知道我的第二个版本代码是否100%正确?如果有人发现任何逻辑问题,请指出。 问题陈述 给定一个非负整数数组,您最初位于数组的第一个索引处。 数组中的每个

  • 如何在数据集中找到几个最小值中的第一个?我希望至少2大于最小值。 例如, 我想将df['value'][0]或者简单地说(0.6)标识为这个数组中的第一个最小值。然后将df[‘值’][4]或(2.8)确定为至少比第一个确定的最小值(0.6)大2的值。 这适用于其他数据集,但在最小值为第一个时不适用。 理想的输出是: 正如评论中建议的那样,循环将是更好的方法。

  • 给定一个整数 Arr 数组和一个整数 K,将对每个具有整数 X 的元素 A[i] 执行按位 AND 让Final sum定义如下:i的所有值(0到array-1的长度)的总和(A[i]AND X) 返回受以下约束的整数 X: 最终总和应该是最大值 X在其二进制表示中应该将K位精确地包含为1 如果X的多个值满足上述条件,则返回可能的最小值X 12在其二进制中恰好包含2位,并且是为所有(A[i]AND

  • 我试图在N大小的数组的k个元素中找到最小和次最小的元素(没有排序和最小/最大堆)。 使用传统的方法,首先从第< code>0个元素开始,在第< code>k个元素中找到最小的和第二小的元素,然后将起始点移动< code>1并重复该过程。但是它的复杂度是< code>O(Nk)。如果可能,我需要一个复杂度为< code>O(N)的解决方案。对此有什么建议吗? 在Jubobs的注释后编辑:例如,如果s