首页 > 其他 > 详细

leetcode_1033. Moving Stones Until Consecutive

时间:2019-05-08 20:11:17      阅读:135      评论:0      收藏:0      [点我收藏+]

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};
    }
};

 

leetcode_1033. Moving Stones Until Consecutive

原文:https://www.cnblogs.com/jasonlixuetao/p/10833589.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!