​力扣解法汇总1769. 移动所有球到每个盒子所需的最小操作数

news/2024/7/3 7:38:57

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

有 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'

解题思路:

* 解题思路:
* 以i的位置来进行分割,分为left和right。
* 先求出rightSum和rightNum,然后遍历boxes。
* result[i]其实就等于把左侧的往右挪,把右侧的往左挪,最终求出其sum值和。
* 所以遍历的时候,遍历一个位置,就可以对应计算leftNum和leftSum,然后重新加计算右侧的rightSum和rightNum。

代码:

public class Solution1769 {

    public int[] minOperations(String boxes) {

        int leftSum = 0;
        int leftNum = 0;
        int rightSum = 0;
        int rightNum = 0;
        char[] chars = boxes.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == '0') {
                continue;
            }
            rightNum++;
            rightSum += (i);
        }
        int[] result = new int[boxes.length()];
        for (int i = 0; i < chars.length; i++) {
            result[i] = Math.abs(rightSum - i * rightNum) + Math.abs(leftSum - i * leftNum);
            if (chars[i] == '1') {
                leftNum++;
                leftSum += i;
                rightSum -= i;
                rightNum--;
            }
        }
        return result;
    }
}


http://lihuaxi.xjx100.cn/news/299078.html

相关文章

详解设计模式:策略模式

策略模式&#xff08;Strategy Pattern&#xff09;也被称为政策模式&#xff08;Policy Pattern&#xff09;&#xff0c;是在 GoF 23 种设计模式中定义了的行为型模式。 策略模式 是针对一组算法&#xff0c;将每一个算法封装到具有共同接口的独立的类中&#xff0c;使得它们…

【观察】为年轻人打造性价比之选,酷开入局投影赛道“正当其时”

毫无疑问&#xff0c;疫情三年改变了人们的生活习惯&#xff0c;居家办公&#xff0c;宅家娱乐已成为很多人的选择。也正因此&#xff0c;以智能便携投影为代表的创新产品&#xff0c;正在成为不少年轻人的“新宠”&#xff0c;特别是投影仪的大屏相对大尺寸的液晶电视有着更为…

SimCSE:对比学习,只需要Dropout

要说2021年上半年NLP最火的论文&#xff0c;想必非《SimCSE: Simple Contrastive Learning of Sentence Embeddings》莫属。SimCSE的全称是Simple Contrastive Sentence Embedding Sentence Embedding Sentence Embedding一直是NLP领域的一个热门问题&#xff0c;主要是因为其…

leecode#Excel表列名称#多数元素

题目描述&#xff1a; 给你一个整数 columnNumber &#xff0c;返回它在 Excel 表中相对应的列名称。 分析&#xff1a; 由于Excel 表的列名称由大写字母组成&#xff0c;大写字母共有 2626 个&#xff0c;因此列名称的表示实质是 26 进制&#xff0c;需要将 26 进制转换成十…

React—— HelloWorld

React 学习笔记Hello WorldJSX (JavaScript XML) 语法规则JavaScript 语法函数组件、类组件 & 属性 props组合组件生命周期函数 & 状态 state事件处理refs受控组件、非受控组件 & 高阶函数、函数的柯里化npm参考Hello World <!DOCTYPE html> <html lang&…

文件批量从gbk转成utf8的工具

工具名&#xff1a;GB/BIG5/UTF-8 文件编码批量转换程序 下载地址&#xff1a; https://www.wenjiangs.com/wp-content/uploads/2018/05/GB2UTF8.zip 程序功能&#xff1a;将 GB、BIG5、UTF-8 文件相互转换&#xff0c;方便的批量处理能力&#xff0c;主要用于网站文件编码方式…

一文读懂 HTTP/2 特性

HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新&#xff0c;主要基于 SPDY 协议。由互联网工程任务组&#xff08;IETF&#xff09;的 Hypertext Transfer Protocol Bis&#xff08;httpbis&#xff09;工作小组进行开发。该组织于2014年12月将HTTP/2标准提议递交至…

四、卷积、转置卷积(上卷积)大小计算公式

卷积计算公式&#xff1a; Out (In -kernel_size 2*padding) / stride 1转置卷积&#xff08;上卷积&#xff09;大小计算公式&#xff1a; Out (In -1)*stride -2*padding kernel_size案例1&#xff08;转置卷积&#xff09;&#xff1a; 1、将 1 * 1 卷积成 4 * 4 &a…