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

LeetCode-1033. 移动石子直到连续

题目链接

LeetCode-1033. 移动石子直到连续

题目描述

在这里插入图片描述

题解

题解一(Java)

作者:@仲景
这题目挺难懂的,得画画图才能更好的理解
这也是LeetCode的尿性,习惯了,非得整这种别人看不懂的鸟语
你可以这样理解,给你一个假设长度为无穷的数组,其中有3个下标的位置赋值成了1,其余的都是0
问你,每次只能从头尾选择移动1次,最多多少次能让着3个1排到一起,最少多少次能让着3个1排到一起
这样也许会更好懂一些
先说最多的情况,最多的情况就是左边的1每次1步,一直移动到中间的1的前一个索引位置,右边的1每次1步,一直移动到中间的1的后一个索引位置
首先左右两个1的距离应该是 c-a-1,因为中间还有一个b,所以还要-1,那么最多的公式就是c-a-2
那么最少情况呢,可以分成好多种
情况一:abc本身索引就是连续的,不需要动
情况二:ab连续或者bc连续,只需要把另外一个挪过来就可以了,移动1次
情况三:abc之间有空隙,但是空隙只有1个,那么随便挪动另外一个过来,最少也是移动1次
情况四:abc之间有空隙,但是空隙很多,所有a移动到b的前一个位置需要1次,c移动到b的后一个位置需要1次,那么最少也得2次
所有情况就已经讲完了,下面的图和情况1234不是一一对应的,只是用来证明情况1234的图
在这里插入图片描述

class Solution {public int[] numMovesStones(int a, int b, int c) {int[] arr = {a, b, c};Arrays.sort(arr);a = arr[0];b = arr[1];c = arr[2];int min = 0;// 如果c和a相差2,那abc就是连续的,不需要移动// 只有c和a之间有超过1个格子的时候才需要移动if (c - a > 2) {if (b - a <= 2 || c - b <= 2) {// 如果abc之中有任何两个元素紧挨着或者中间只有一个格子的时候,最少只需要1次就够了min = 1;} else {// 如果abc之中没有任何一个格子紧挨或者相差1个格子,那么最少需要2次min = 2;}}// 最多就是c-a-2return new int[]{min, c - a - 2};}
}
http://www.lryc.cn/news/64058.html

相关文章:

  • JVM调优入门指南:掌握步骤、参数和场景
  • 基于JSP+MySQL的跳蚤市场网站设计与开发
  • 内网穿透NPS和宝塔Nginx配合使用,开启SSL访问本地局域网网络
  • ToLua框架
  • Golang-常见数据结构Map
  • 基于空间矢量脉宽调制(SVPWM)的并网逆变器研究(Simulink)
  • 介绍tcpdump在centos中的使用方法
  • 机器学习实战:Python基于DT决策树模型进行分类预测(六)
  • 操作系统之进程同异步、互斥
  • 你了解这2类神经性皮炎吗?常常预示着这5类疾病!
  • 二叉搜索树【Java】
  • 二叉树的遍历方式
  • SpringCloud01
  • SpringBoot整合Redis实现点赞、收藏功能
  • 【Java入门合集】第一章Java概述
  • Android无线调试操作说明
  • 什么是 Python ?聊一聊Python程序员找工作的六大技巧
  • RabbitMQ 01 概述
  • 面经|曹操出行供需策略运营
  • 【Python】selenium工具
  • 实验六~Web事件处理与过滤器
  • 刷题4.28
  • 做了一年csgo搬砖项目,还清所有债务:会赚钱的人都在做这件事 !
  • 线性回归模型(7大模型)
  • VP记录:Codeforces Round 868 (Div. 2) A~D
  • 【VQ-VAE-2论文精读】Generating Diverse High-Fidelity Images with VQ-VAE-2
  • 并发编程基石:管程
  • 电路中噪声来源
  • JAVASE的全面总结
  • 关于repeater录制的流量子调用的identity中带有~S的情况