[LeetCode 1769]移动所有球到每个盒子所需的最小操作数

news2025/1/9 12:32:34

题目描述

题目链接:[LeetCode 1769]移动所有球到每个盒子所需的最小操作数

有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes ,其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的,而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。

在一步操作中,你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。第 i 个盒子和第 j 个盒子相邻需满足 abs(i - j) == 1 。注意,操作执行后,某些盒子中可能会存在不止一个小球。

返回一个长度为 n 的数组 answer ,其中 answer[i] 是将所有小球移动到第 i 个盒子所需的 最小 操作数。

每个 answer[i] 都需要根据盒子的 初始状态 进行计算。

示例1

输入:boxes = “110”
输出:[1,1,3]
解释:每个盒子对应的最小操作数如下:

  1. 第 1 个盒子:将一个小球从第 2 个盒子移动到第 1 个盒子,需要 1 步操作。
  2. 第 2 个盒子:将一个小球从第 1 个盒子移动到第 2 个盒子,需要 1 步操作。
  3. 第 3 个盒子:将一个小球从第 1 个盒子移动到第 3 个盒子,需要 2 步操作。将一个小球从第 2 个盒子移动到第 3 个盒子,需要 1 步操作。共计 3 步操作。

示例2

输入:boxes = “001011”
输出:[11,8,5,4,3,4]

提示

  • n == boxes.length
  • 1 <= n <= 2000
  • boxes[i] 为 ‘0’ 或 ‘1’

思路分析

1.boxes.length <= 2000, 那么如果算法复杂度为O( n 2 n^2 n2),大约为 1 0 6 10^6 106,是可以暴力通过的,这是方法1

2.那么要在 n 2 n^2 n2的基础上进行突破,就需要将复杂度降低到O(n log n)或者O(n)的级别

我们可以从左右两个方向来讨论,首先是左侧,如图所示,假如当前遍历到了红色结点,这个结点的坐标为i,他的左边有两个结点:

在这里插入图片描述
那么把左边两个结点都移动到i位置所需要的代价就是T1 + T2

T1 与 T2不好计算,所以我们计算两个结点到左端点的距离,L1 和 L2

而L1 + T1 = i, L2 + T2 = i,

因此T1 + T2 = 2 * i - (L1 + L2)

依次类推要计算T1 + T2 + … + Tn = n * i - (L1 + L2 + L3 + … + Ln)

所以我们记录每个时刻的(L1 + L2 + … + Ln) 以及 n为多少,就可以计算左边所有结点到当前结点的代价了。

同理,右侧结点也是一样。

代码1(暴力)

class Solution {
public:
    vector<int> minOperations(string boxes) {
        int n = boxes.size();
        vector<int> res(n);
        unordered_set<int> st;
        for(int i = 0; i < n; i++) {
            if(boxes[i] == '1') st.insert(i);
        }

        for(int i = 0; i < n; i++) {
            int cnt = 0;
            for(auto t : st) {
                cnt += abs(t - i);
            }
            res[i] = cnt;
        }

        return res;
    }
};

代码2

class Solution {
public:
    vector<int> minOperations(string boxes) {
        int n = boxes.size();
        //l[i]存储i结点左边所有结点到i的代价,r[i]同理
        vector<int> l(n), r(n), res(n);
        int cnt = 0, len = 0;
        for(int i = 0; i < n; i++) {
            l[i] = i * cnt - len;
            //如果当前结点为1,那么len要加上i,同时结点数++
            if(boxes[i] == '1') len += i, cnt++;
        }

        cnt = 0, len = 0;
        for(int i = n - 1; ~i; i--) {
            r[i] = (n - i - 1) * cnt - len;
            if(boxes[i] == '1') len += (n - i - 1), cnt++;
        }

        for(int i = 0; i < n; i++) 
            res[i] = l[i] + r[i];
        return res;
    }
};

运行用时

执行用时缩短了39 / 40
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Gradle简单配置

写在前面&#xff1a;一开始配置gradle的时候&#xff0c;最好不要把他maven仓库配置在一起&#xff0c;前段时间配置公司项目身心俱疲。大部分公司里面用gradle都是配置的自己的仓库地址&#xff0c;所以有的东西就不要和网上的配置保持一致了&#xff0c;比如说这个仓库地址。…

网站都变成灰色了,它是怎么实现的?

大家好&#xff0c;我是二哥呀。 想必大家都感受到了&#xff0c;很多网站、APP 在昨天都变灰了。 先来感受一下变灰后的效果。 这种灰色的效果怎么实现的呢&#xff1f;如何做到图片、文字、按钮都变灰的效果呢&#xff1f; 方案 1&#xff0c;换一套灰色的 UI&#xff0c;…

Github限时开源24小时,Alibaba架构师内部最新发布SpringCloud开发手册

前言 微服务是SOA之后越来越流行的体系结构模式之一&#xff01; 如果您关注行业趋势&#xff0c;就会发现,如今商业机构不再像几年前那样&#xff0c;开发大型应用程序&#xff0c;来管理端到端之间的业务功能&#xff0c;而是选择快速灵活的微服务。 ​ 通过微服务&#x…

Unity 之 后处理实现界面灰度效果(PostProcessing实现 | Shader实现)

Unity 之 后处理实现界面灰度效果前言一&#xff0c;Post Processing1.1 设置组件1.2 代码控制二&#xff0c;Shader材质实现2.1 原理API2.2 编写Shader2.3 编写代码2.4 实现效果效果展示前言 在Unity中实现后处理效果有两种方式&#xff1a;一种是通过使用Unity官方提供的Pos…

H3C AC三层组网架构,AP自动上线自动固化

核心交换机: [HX]dis cu [HX]dis current-configuration version 7.1.075, Alpha 7571 sysname HX irf mac-address persistent timer irf auto-update enable undo irf link-delay irf member 1 priority 1 dhcp enable lldp global enable system-working-mode standard xbar…

[附源码]计算机毕业设计仓库管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

C#连接MySql数据库

C#连接MySql数据库 具体步骤如下 第一步&#xff1a;提前将mysql服务打开&#xff0c;用xampp的需要将Mysql服务开启&#xff1b; 第二步&#xff1a;新建一个C#项目 第三步&#xff1a;在项目中下载&#xff1a;MySql.Data的NuGet&#xff0c;作者为Oracle&#xff1b; 第四布…

免息配资天宇优配|世界杯与A股有何关系?券商这样分析!

世界杯与A股有何联系&#xff1f; 卡塔尔世界杯开幕近两周&#xff0c;世界各地球迷热切关注。与此一起&#xff0c;不少金融机构“频频出镜”&#xff0c;多家券商发布了世界杯相关论题研究报告&#xff0c;讨论“世界杯效应”是否存在、世界杯期间是否利好大消费板块等论题。…

代码随想录刷题|LeetCode 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

目录 309.最佳买卖股票时机含冷冻期 思路 1、确定dp数组以及下标含义 2、确定递推公式 3、初始化 4、遍历顺序 5、获取结果 最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 思路 买卖股票的最佳时机含手续费 309.最佳买卖股票时机含冷冻期 题目链接&#xff1a;力扣…

Kafka的存储机制和可靠性

Kafka存储机制前言一、Kafka 存储选择二、Kafka 存储方案剖析三、Kafka 存储架构设计四、Kafka 日志系统架构设计4.1、Kafka日志目录布局4.2、Kafka磁盘数据存储五、Kafka 可靠性5.1、Producer的可靠性保证5.1.1、kafka 配置为 CP(Consistency & Partition tolerance)系统5…

【正厚软件】0基础学IT,来Linux的发展历史吧

本文来源&#xff1a;正厚软件沙老师 Linux 的发展历史 1991年林纳斯.托瓦兹开发了Linux内核&#xff0c;宣布它的诞生。 1999年&#xff0c;IBM宣布于RedHat公司建立伙伴关系&#xff0c;以确保RedHat在IBN机器上的正确运行。 2001年&#xff0c;IBM决定投入10亿美元扩大Linux…

光源基础(4)——如何选择光源及各种打光结构

如何选择和设计光源方案 打光的首要目的是把目标显现出来&#xff0c;同时把背景和干扰信息尽可能地过滤掉或者淡化&#xff0c;这样就可以得到有利于处理的图像&#xff0c;整个系统的精度和稳定性也可以得到必要的保证。 基本思路 如右图所示,光照射到物体表面之后,会发生一系…

Cadence Allegro PCB设计88问解析(十九) 之 Allegro中文字大小设置

个学习信号完整性仿真的layout工程师 在PCB投板之前&#xff0c;经常会进行丝印调整。当然有的单板设计&#xff0c;比如手机这种高密度单板是没有丝印的。但是在绝多数的PCB上是添加丝印的&#xff0c;为了方便前期的测试。丝印也就是我们常说的器件的位号&#xff0c;还包括一…

线上线程池配置错误导致服务故障

背景 某个早高峰&#xff0c;服务大量抛出线程拒绝的异常&#xff0c;同时没有触发自动扩容&#xff0c;损失了大量请求&#xff0c;影响了单量 原因分析 5why分析法 1、为什么服务抛出线程拒绝&#xff1f; rpc线程池设置为了256&#xff0c;故障期间线程处理慢&#xff0c…

【华秋Nidec尼得科】滑动开关CL-SB的应用

01 什么是滑动开关 滑动开关是用于选择、接通或断开电路的较成熟技术之一, 但由于其纯机电性质, 作为控制或交互机器或过程的某个方面的一种低成本和可靠手段&#xff0c;在现今仍然广为使用。滑动开关被设计成由人的手指驱动, 通常用于工业、商业、电信和消费类应用, 为人与机…

hadoop 3.x大数据集群搭建系列8- 一些辅助的shell脚本

文章目录一. jps查看各个节点后台进程二. 启停hadoop集群三. 群起zookeeper集群脚本zk.sh四. 同步文件五. 启动停止整个集群一. jps查看各个节点后台进程 我们经常需要查看各个节点的进程情况 vi jps.sh #!/bin/bash for i in hp5 hp6 hp7 do echo -------------------------…

MATLAB绘图合集:fcontour绘制隐函数等高线图

本文主要介绍隐函数等高线图的绘制。 说明 fcontour(f) 根据 x 和 y 的默认区间 [-5 5] 和 z 的固定级别值绘制 z f(x,y) 函数的等高线。 fcontour(f,xyinterval) 将在指定区间绘图。要对 x 和 y 使用相同的区间&#xff0c;请将 xyinterval 指定为 [min max] 形式的二元素向量…

单视频播放量超20万的公开课配套教材,猫书来了~

吹爆、强推、比刷剧还爽、一生推、传疯了&#xff01; 很难想象&#xff0c;网友们会用这些词来形容一个纯分享深度强化学习基础知识的视频课。 在 B 站上搜索 “深度强化学习”&#xff0c;在排名 TOP 10 的相关课程中&#xff0c;有 4 个是王树森老师的 Reinforcement Learni…

基于CFD的车辆进气系统流场仿真与分析

目 录 摘 要 I ABSTRACT II 第1章 绪论 1 1.1研究背景 1 1.2研究现状 2 1.2.1国外的研究概况 2 1.2.2国内的研究概况 3 1.3研究思路及方法 4 第2章 车辆进气系统流场消声元件设计 6 2.1进气系统概述 6 2.1.1进气系统结构及工作原理 6 2.1.2进气噪声的产生机理 7 2.2进气消声元件…

编译原理期末总结

思维导图&#xff1a; 引论 编译程序的过程&#xff1a; 词法分析——>语法分析——>语义分析——>中间代码生成——>代码优化——>目标代码生成 其中中间代码生成和代码优化不是必要的。 文法和语言 1.巨型和句子的区别 句型>句子,句子是终结符串&am…