【每日一题Day192】LC1033移动石子直到连续 | 分类讨论 贪心

简介: 【每日一题Day192】LC1033移动石子直到连续 | 分类讨论 贪心

移动石子直到连续【LC1033】

三枚石子放置在数轴上,位置分别为 abc

每一回合,你可以从两端之一拿起一枚石子(位置最大或最小),并将其放入两端之间的任一空闲位置。形式上,假设这三枚石子当前分别位于位置 x, y, zx < y < z。那么就可以从位置 x 或者是位置 z 拿起一枚石子,并将该石子移动到某一整数位置k 处,其中 x < k < zk != y

当你无法进行任何移动时,即,这些石子的位置连续时,游戏结束。

要使游戏结束,你可以执行的最小和最大移动次数分别是多少? 以长度为 2 的数组形式返回答案:answer = [minimum_moves, maximum_moves]

要赶紧回归学习状态

  • 思路排序后分类讨论
  • 最大移动次数贪心

           每次向中间十字移动一格,使移动次数最大

  • 最小移动次数【分情况讨论】由于可以移动至任意位置,因此最小次数最多为2
  • 如果三颗石子已经连续,那么不需要移动
  • 如果三颗石子两颗连续 ,那么只需移动1次
  • 如果两颗石子距离为1,那么只需移动1次
  • 否则,移动2次
  • 实现
class Solution {
    public int[] numMovesStones(int a, int b, int c) {
        int[] stones = {a, b, c};
        Arrays.sort(stones);
        int[] res = new int[2];
        res[1] = stones[2] - stones[0] - 2;// 最大
        // 最小
        // 已经连续 0次
        // 两颗连续 1次
        // 两颗相邻为1 1次
        // 否则 移动2次
        if(stones[2] - stones[0] == 2){
            res[0] = 0;
        }else if (stones[2] - stones[1] <= 2 || stones[1] - stones[0] <= 2){
            res[0] = 1;
        }else {
            res[0] = 2;
        }
        return res;
    }
}

复杂度

  • 时间复杂度:O(1)
  • 空间复杂度:O(1)
目录
相关文章
|
6月前
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
53 0
|
6月前
|
存储
【每日一题Day275】LC771宝石与石头 | 哈希表 状态压缩
【每日一题Day275】LC771宝石与石头 | 哈希表 状态压缩
43 0
|
6月前
【每日一题Day149】LC2389和有限的最长子序列 | 贪心+前缀和+二分查找
【每日一题Day149】LC2389和有限的最长子序列 | 贪心+前缀和+二分查找
43 0
|
5月前
|
存储
【洛谷 P1255】数楼梯 题解(递归+记忆化搜索+高精度)
这是一个使用动态规划解决的“数楼梯”问题。给定楼梯数`N`,求不同上楼方式的数量。程序通过递归函数`f()`计算,其中`f(x) = f(x - 1) + f(x - 2)`,初始条件`f(1) = 1`,`f(2) = 2`。考虑到数据规模可能很大,使用了高精度加法运算。样例输入`4`,输出`5`。代码中定义了一个存储中间结果的向量`mem`,并提供了一个用于显示高精度数的`printv()`函数。
85 0
|
1月前
lanqiao oj 1628 最短循环节问题
lanqiao oj 1628 最短循环节问题
7 0
|
6月前
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
49 1
|
6月前
|
机器学习/深度学习
【每日一题Day271】LC918环形子数组的最大和 | 分类讨论 + dp
【每日一题Day271】LC918环形子数组的最大和 | 分类讨论 + dp
50 0
【每日一题Day271】LC918环形子数组的最大和 | 分类讨论 + dp
|
6月前
【每日一题Day261】LC16最接近的三数之和 | 双指针
【每日一题Day261】LC16最接近的三数之和 | 双指针
37 0
|
6月前
【每日一题Day265】LC979在二叉树中分配硬币 | 树形dp
【每日一题Day265】LC979在二叉树中分配硬币 | 树形dp
55 0
|
6月前
【每日一题Day122】LC1237找出给定方程的正整数解 | 双指针 二分查找
【每日一题Day122】LC1237找出给定方程的正整数解 | 双指针 二分查找
40 0