首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最小硬币,无DP

最小硬币,无DP
EN

Stack Overflow用户
提问于 2018-01-18 03:15:41
回答 1查看 66关注 0票数 0
代码语言:javascript
复制
public int MinCoins(int[] change, int cents)
{
    Stopwatch sw = Stopwatch.StartNew();

    int coins = 0;
    int cent = 0;
    int finalCount = cents;
    for (int i = change.Length - 1; i >= 0; i--)
    {
        cent = cents;

        for (int j = i; j <= change.Length - 1; j++)
        {
            coins += cent / change[j];
            cent = cent % change[j];
            if (cent == 0) break;
        }

        if (coins < finalCount)
        {
            finalCount = coins;
        }
        coins = 0;
    }
    sw.Stop();
    var elapsedMs = sw.Elapsed.ToString(); ;
    Console.WriteLine("time for non dp " + elapsedMs);
    return finalCount;
}

public  int MinCoinsDp(int[] change, int cents)
{
    Stopwatch sw = Stopwatch.StartNew();
    int[] minCoins = new int[cents + 1];

    for (int i = 1; i <= cents; i++)
    {
        minCoins[i] = 99999;

        for (int j = 0; j < change.Length; j++)
        {

            if(i >= change[j])
            {

                int n = minCoins[i - change[j]] + 1;

                if (n < minCoins[i])
                    minCoins[i] = n;
            }
        }
    }
    sw.Stop();
    var elapsedMs = sw.Elapsed.ToString();
    Console.WriteLine("time for dp " + elapsedMs);

    return minCoins[cents];
}

我已经使用迭代和动态编程编写了最少数量的硬币程序。我看过很多博客讨论DP来解决这个问题。迭代解的运行时间为O(numberOfCoins * numberofCoins),DP的运行时间为O(numberofcoins running *arraySize)。哪一个更好?请推荐一本高级算法的好书。

请使用{v1 > v2 > v3 > v4}运行,如{25,10,5}

EN

回答 1

Stack Overflow用户

发布于 2018-01-18 03:32:38

我看到您正在尝试测量这两种算法的运行时间,并决定哪一种更好。

关于你的算法,还有一件更重要的事情。不幸的是,第一个是不正确的。例如,请考虑以下输入:

假设我们想要交换100,并且可用硬币具有以下名义形式:5, 6, 90, 96。我们能做的最好的事情就是使用3硬币:5, 5, 90。但是,您的解决方案将返回1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48308415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档