zoukankan      html  css  js  c++  java
  • leetcode_1033. Moving Stones Until Consecutive

    https://leetcode.com/problems/moving-stones-until-consecutive/

    题意:给定3个点,每次从两个端点(位置最小或位置最大)中挑选一个点进行移动,将其移动到原先两个端点之间的空位置上,直到3个点位置连续,问最少多少步,和最多多少步。

    思路:

    对于(x,y,z),x<y<z:

    最多步数:

    固定一端,一直选择另一端的端点移动。具体地,固定右端点,一直选择左端点进行移动,每次将左端点移动至最左边的空位置上(greedy),每一步这样的操作,消耗[x,y]区间中的一个空位置,直至用掉所有空位置;或者说每一次操作后,最新的[x1,y1]相对[x,y]长度减1,一直减到xn+2==yn。

    故,最多的步数为,z-x-2。

    最少步数:

    若x+1=y,y+1=z,则需0步;

    若y-x<=2或者z-y<=2,则需1步;

    否则,需2步。

    class Solution
    {
    public:
        vector<int> numMovesStones(int a, int b, int c)
        {
            if(a>b)
                swap(a,b);
            if(a>c)
                swap(a,c);
            if(b>c)
                swap(b,c);
            //cout<<a<<" "<<b<<" "<<c<<endl;
            if(a+1==b && b+1==c)
                return vector<int>{0,0};
            int lowerbound=0, upperbound=c-a-2;
            if(b-a<=2||c-b<=2)
                lowerbound=1;
            else
                lowerbound=2;
            //cout<<lowerbound<<" "<<upperbound<<endl;
            return vector<int>{lowerbound,upperbound};
        }
    };
  • 相关阅读:
    celery
    KeyError: 'pass_ticket'
    Go语言标准库之context
    Go语言标准库之log
    Go语言标准库之time
    Go语言基础之Cookie和Session
    #if...#endif的用法总结
    汇总#pragma用法
    Linux串口编程(转载)
    Linux系统调用(转载)
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/10833589.html
Copyright © 2011-2022 走看看