• 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] 都需要根据盒子的 初始状态 进行计算。

    LevelAC rate
    Medium88.0%

    题目解析:

    通过数据量判断可以通过一个二层嵌套的for循环进行实现,依次计算将每个盒子作为目标盒子时需要的最小操作数,代码如下:

    1. class Solution {
    2. public:
    3. vector<int> minOperations(string boxes) {
    4. int len = boxes.length();
    5. vector<int> res(len);
    6. for(int i = 0 ; i < len ; i++){
    7. int temp = 0;
    8. for(int j = 0 ; j
    9. if(boxes[j]=='1')temp += abs(j-i);
    10. }
    11. res[i] = temp;
    12. }
    13. return res;
    14. }
    15. };

    时间复杂度O(N^2) , 空间复杂度O(N)。

    执行用时:104 ms, 在所有 C++ 提交中击败了40.15%的用户

    内存消耗:8.7 MB, 在所有 C++ 提交中击败了71.75%的用户

    当然也可以通过先验信息实现O(N)的时间复杂度,假设我把第i个盒子作为目标盒子,并且盒子左边有left个球,右边有right个球,此时我的操作数为operation,我要改变目标盒子为i+1时,这时候操作数应该变为:operations+left-right。注意在移动的时候留意left和right的变化,代码如下:

    1. class Solution {
    2. public:
    3. vector<int> minOperations(string boxes) {
    4. int left = boxes[0]-'0' , right = 0 , operations = 0;
    5. for(int i = 1 ; ilength() ; i++){
    6. if(boxes[i] == '1'){
    7. right++;
    8. operations += i;
    9. }
    10. }
    11. vector<int> res;
    12. res.push_back(operations);
    13. for(int i = 1 ; ilength() ; i++){
    14. operations = operations+left-right;
    15. res.push_back(operations);
    16. if(boxes[i]=='1'){
    17. left++;
    18. right--;
    19. }
    20. }
    21. return res;
    22. }
    23. };

    执行用时:8 ms, 在所有 C++ 提交中击败了67.66%的用户

    内存消耗:9 MB, 在所有 C++ 提交中击败了45.73%的用户

  • 相关阅读:
    Rust GUI方案调研
    JavaScript事件
    单链表的实现
    代碼隨想錄算法訓練營|第四十一天|第九章 动态规划 理论基础 、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯。刷题心得(c++)
    8/7 牛客6+div2D+倍增lca
    百度飞桨(PaddlePaddle)-数字识别
    shell多线程的资料
    UNIAPP-ADB无线调试
    golang template 使用
    使用记录-MongoDB
  • 原文地址:https://blog.csdn.net/rygy_/article/details/128149531