当前位置: 首页 > news >正文

【每日一题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) O(1)
      • 空间复杂度: O ( 1 ) O(1) O(1)
http://www.lryc.cn/news/64166.html

相关文章:

  • 2023年软件测试常见面试题100%问必背全套教程
  • TypeScript 基本概念
  • libfacedetection 人脸检测库 检测速度慢的问题
  • 项目骨架搭建
  • “火灾不分昼夜,安全在我心中”——五一前厂房消防检查纪实
  • UNIX环境高级编程——进程关系
  • C# ref和out用法和区别
  • 信息复制的革命:印刷术【提高信噪比】
  • 【MySQL】事务
  • 学习HCIP的day.03
  • Maven项目的配置
  • Spring Boot使用(基础)
  • 6WINDGate-overview
  • Java8新特性-流式操作
  • Nautilus Chain Layer 3 圆桌会议圆满举办,超4.8K用户观看
  • 本地elasticsearch中文分词器 ik分词器安装及使用
  • Java 中的异常处理机制是什么?如何使用它来处理程序中的异常?(七)
  • 基于UDQ的并网单相逆变器控制【同步参考系下单相并网全桥正弦PWM逆变器闭环控制】(Simulink)
  • JAVA开发——常用的注解
  • 【Java笔试强训 24】
  • SpringCloud详解
  • 如何保障网络安全
  • 网络基础:socket套接字
  • 程序员如何学好PHP?做好这五个方面就够了
  • 【开源项目】Build your own X 构建自己的项目
  • 在.NET Core中正确使用HttpClient的方式
  • 【C++】位运算类题目总结
  • Node服务端开发【NPM】
  • Doris(21):Doris的函数—日期函数
  • 和月薪5W的阿里程序员聊过后,才知道自己一直在打杂...