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

news2024/10/2 22:28:19

【LetMeFly】1769.移动所有球到每个盒子所需的最小操作数

力扣题目链接:https://leetcode.cn/problems/minimum-number-of-operations-to-move-all-balls-to-each-box/

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'

方法一:数学思维

首先遍历一遍原始数组,求出将所有小球全部移动到下标 0 0 0的话所需要的步骤。同时,记录下来从下标 1 1 1开始到结束,一共有多少个小球

int right1 = 0, left1 = 0, cnt = 0;  // right1记录下标0后面有多少个1(不包含下标0) | cnt记录将所有小球都移动到下标0需要多少步 | left1 记录下标0左边有多少个1
int n = boxes.size();
for (int i = 1; i < n; i++) {
    if (boxes[i] == '1') {
        right1++, cnt += i;
    }
}
vector<int> ans(n);
ans[0] = cnt;

接下来我们再次遍历数组,如果某个元素的上一个元素是1,那么这个元素左边的1的数量就会加一,因此left1++

这时候,这个盒子和上一个盒子相比,这一个盒子左边*的所有1需要移动的步数都+1,这一个盒子左边共有left11,因此cnt += left1

这时候,这个盒子和上一个盒子相比,上一个盒子右边的所有1需要移动的步数都-1,上一个盒子右边共有right1个1,因此cnt -= right1

之后,如果这个盒子初始值也是1的话,再在遍历下一个元素之前提前更新right1的值(````right1–```)

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1),力扣答案不计入算法空间复杂度

AC代码

C++

class Solution {
public:
    vector<int> minOperations(string& boxes) {
        int right1 = 0, left1 = 0, cnt = 0;
        int n = boxes.size();
        for (int i = 1; i < n; i++) {
            if (boxes[i] == '1') {
                right1++, cnt += i;
            }
        }
        vector<int> ans(n);
        ans[0] = cnt;
        for (int i = 1; i < n; i++) {
            if (boxes[i - 1] == '1')
                left1++;
            cnt -= right1;
            cnt += left1;
            ans[i] = cnt;
            if (boxes[i] == '1')
                right1--;
        }
        return ans;
    }
};

运行结果还不错:

result

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/128146735

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

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

相关文章

D. Vupsen, Pupsen and 0(思维 + 从小部分入手(由小推大))

Problem - 1582D - Codeforces Vupsen和Pupsen被赠予一个整数数组。由于Vupsen不喜欢数字0&#xff0c;他把数组中所有等于0的数字都扔掉了。结果&#xff0c;他得到一个长度为n的数组a。 相反&#xff0c;Pupsen喜欢数字0&#xff0c;当他看到没有0的数组时&#xff0c;他很…

【Linux系统】第三篇:Linux中软件包管理器yum的使用

文章目录一、yum1、 什么是软件包和软件包管理器2、 什么是yum3、 Linux下软件安装的几种方式4、 使用yum的注意事项5、 yum的使用二、Linux / Windows下的数据互传1、 lrzsz的安装2、rzsz工具3、将Windows的数据传到Linux中4、将Linux的数据传到Windows中三、yum源配置文件1、…

linux下命令操作

grep:文本内容搜索;find:文件或者目录名以及权限属主等匹配搜索 eg: grep success * /*查找当前目录下面所有文件里面含有success字符的文件 14. kill 可以杀死某个正在进行或者已经是dest状态的进程 eg; ps ax 15. passwd 可以设置口令 16. history 用户用过的命令 eg: …

光源基础(1)——常见光源性能比对和好图像评价指标

机器视觉系统的核心部分是&#xff1a;&#xff08;1&#xff09;图像的采集 (如何得到一幅好的图片)和&#xff08;2&#xff09;图像的处理(如何找到最有效率、最准确的算法) 所有的信息均来源于图像&#xff0c;图像质量对整个视觉系统极为关键。 目前视觉行业中用于图像处理…

nltk报错punkt 缺失 Error Loading Error11004

问题描述 在运行NLTK的时候报错了&#xff0c;找不到punkt 文件&#xff0c;运行代码nltk.dowload(punkt也是没有用。 后面手动安装好了punkt后又缺了averaged_percentage_tragger _ 最后还是手动下载最可行 &#xff0c;报错截图如下, punkt Error 报错截图 averaged_percen…

小米8 SE刷机安卓13

警告&#xff1a;这些说明仅在您精确遵循每个部分和步骤时才有效。 失败后不要继续&#xff01;基本要求 在实际遵循说明之前&#xff0c;请至少通读一次说明&#xff0c;以避免因错过任何步骤而导致的任何问题&#xff01;确保您的计算机具有 adb 和fastboot。可以找到设置说明…

SpringSecurity(二十一)--OAuth2:实现资源服务器(中)实现带有JdbcTokenStore的黑板模式

一、前言 本章将实现授权服务器和资源服务器使用共享数据库的应用程序。这一架构方式被称为黑板模式。这一架构方式被称为黑板模式。为什么叫黑板模式呢&#xff1f;因为可以将其视为使用黑板管理令牌的授权服务器和资源服务器。这种颁发和验证令牌的方法的优点是消除了资源服…

_Linux (ipc命令)

ipcs 查看进程间通信资源/ipcrm 删除进程间通信资源 -m 针对共享内存的操作 ipcs -mipcrm -m shmid(例如下图的5) -q 针对消息队列的操作 -s 针对信号量的操作 -a 针对所有资源的操作 key 唯一值(共享内存名字)shmid 共享内存标识owner 共享内存拥有者名字perms 拥有者对共…

ISP-ASF

1. 概述 1.1 高频与低频区分&#xff1a; 如何区分图像的高频信息和低频信息&#xff0c;所谓高频就是该像素点与周围像素差异较大&#xff0c;常见于一副图像的边缘细节和噪声等&#xff1b;而低频就是该像素点与周围像素差异变化不大&#xff0c;一般体现为图像的平坦区&am…

关于使用pytorch-lightning版本过低的一些问题

今天run了一下这篇Aspect Sentiment Quad Prediction as Paraphrase Generation论文的代码&#xff0c;遇到的都是pytorch-lightning版本问题。 首先是安装pytorch-lightning pip3 install pytorch-lightning -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.…

HTML简单的个人博客网站 DIV学生网页设计作品 dreamweaver作业静态HTML网页设计模板 个人网页作业制作

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

卷起来了!熬夜学习阿里P8全彩版并发编程图册,涨薪就在眼前

并发编程可以总结为三个核心问题&#xff1a;分工、同步、互斥。 并发编程可以总结为三个核心问题&#xff1a;分工、同步、互斥。所谓分工指的是如何高效地拆解任务并分配给线程&#xff0c;而同步指的是线程之间如何协作&#xff0c;互斥则是保证同一时刻只允许一个线程访问共…

一种基于物理信息极限学习机的PDE求解方法

**作者|**PINN山里娃&#xff0c;作者主页 **研究方向|**物理信息驱动深度学习 不确定性 人工智能 偏微分方程 极限学习机 该作者聚焦深度学习模型与物理信息结合前沿研究&#xff0c;提供了一系列AI for science研究进展报告及代码实现&#xff0c;旨在实现物理信息驱动深度学…

动态规划PTA总结

0动态规划 最优子结构&&最值问题&&重叠子问题 ---> 动态规划 引用别人的文章 1数字三角形 1.1题目 给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法&#xff0c;计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下)&am…

HTML+CSS美食静态网页设计——简单牛排美食餐饮(9个页面)公司网站模板企业网站实现

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

SAP MM 为UB类型的STO执行VL10B,报错-没有项目类别表存在(表T184L NL 0002 V)-之对策

SAP MM 为UB类型的STO执行VL10B&#xff0c;报错-没有项目类别表存在&#xff08;表T184L NL 0002 V)-之对策 业务人员创建好了UB类型的转储单据后&#xff0c;试图执行事务代码VL10B&#xff0c;未能成功&#xff0c;报错如下&#xff1a; 报错信息&#xff1a;4500000246 00…

【数据结构】——带头双向循环链表

目录 1.带头双向循环链表 2.链表实现 2.1可完成带头双向可循环链表节点的结构体 2.2申请一个可双向循环的节点 2.3初始化链表 2.4尾插 2.5尾删 2.6头插 2.7头删 2.8打印 2.9查找&#xff08;修改&#xff09; 2.10在pos之前插入x 2.11删除pos位置 2.12判空 2.13记…

Springboot图书馆管理系统毕业设计、Springboot图书借阅系统设计与实现 毕设作品参考

功能清单 【后台管理员功能】 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 资讯分类&#xff1a;录入、修改、查看、删除资讯分类 录入…

【毕业设计源码】基于微信小程序的校园第二课堂(课外活动)管理系统

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍&#xff1a; 二、文档学习资料&#xff1a; 三、模块截图&#xff1a; 四、开发技术与运行环境&#xff1a; 五、代码展示&#xff1a; 六、数据库表截图&#xff1a…

【数据库原理及应用】——数据库设计(学习笔记)

&#x1f4d6; 前言&#xff1a;数据库的设计是指基于现有的数据库管理系统&#xff0c;针对具体应用构建适合的数据库逻辑模式和物理结构&#xff0c;并据此建立数据库及其应用系统&#xff0c;使之能有效地存储和管理数据&#xff0c;满足各类用户的应用需求。本章将介绍数据…