【每日一题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)
目录
相关文章
|
7月前
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
57 0
|
7月前
【每日一题Day149】LC2389和有限的最长子序列 | 贪心+前缀和+二分查找
【每日一题Day149】LC2389和有限的最长子序列 | 贪心+前缀和+二分查找
47 0
|
7月前
【每日一题Day272】LC1499满足不等式的最大值 | 单调队列 大顶堆
【每日一题Day272】LC1499满足不等式的最大值 | 单调队列 大顶堆
33 0
|
7月前
【每日一题Day175】LC1147段式回文 | 贪心 +双指针
【每日一题Day175】LC1147段式回文 | 贪心 +双指针
47 0
|
5月前
【洛谷】P1102 A-B 数对
洛谷 P1102 A-B 数对
51 0
【洛谷】P1102 A-B 数对
|
6月前
|
算法 C++
【洛谷 P1090】[NOIP2004 提高组] 合并果子(贪心算法+哈夫曼编码+优先队列)
该编程题目要求设计算法,将不同种类的果子合并成一堆,使得消耗的体力最小。给定果子种类数`n`(1至10000)和每种果子的数量,需输出合并的最小体力值。使用优先队列(最小堆),每次取出两个数量最少的果子堆合并,并更新总体力消耗。样例输入为3种果子(1, 2, 9),输出最小体力耗费为15。提供的AC代码采用C++实现,通过优先队列优化合并顺序。
85 0
|
7月前
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
58 1
|
7月前
|
人工智能 Java
每日一题《剑指offer》数组篇之连续子数组的最大和
每日一题《剑指offer》数组篇之连续子数组的最大和
60 0
每日一题《剑指offer》数组篇之连续子数组的最大和
|
7月前
【每日一题Day261】LC16最接近的三数之和 | 双指针
【每日一题Day261】LC16最接近的三数之和 | 双指针
40 0
|
7月前
【每日一题Day314】LC1921消灭怪物的最大数量 | 贪心+排序
【每日一题Day314】LC1921消灭怪物的最大数量 | 贪心+排序
53 0