最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?LeetCode1769移動所有球到每個盒子最小操作數(shù)示例

 更新時間:2022年12月16日 16:14:19   作者:LetMeFly  
這篇文章主要為大家介紹了C++?LeetCode1769移動所有球到每個盒子所需最小操作數(shù)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

LeetCode 1769.移動所有球到每個盒子所需的最小操作數(shù)

力扣題目鏈接:leetcode.cn/problems/mi…

n 個盒子。給你一個長度為 n 的二進制字符串 boxes ,其中 boxes[i] 的值為 '0' 表示第 i 個盒子是 的,而 boxes[i] 的值為 '1' 表示盒子里有 一個 小球。

在一步操作中,你可以將 一個 小球從某個盒子移動到一個與之相鄰的盒子中。第 i 個盒子和第 j 個盒子相鄰需滿足 abs(i - j) == 1 。注意,操作執(zhí)行后,某些盒子中可能會存在不止一個小球。

返回一個長度為 n 的數(shù)組 answer ,其中 answer[i] 是將所有小球移動到第 i 個盒子所需的 最小 操作數(shù)。

每個 answer[i] 都需要根據(jù)盒子的 初始狀態(tài) 進行計算。

示例 1:

輸入:boxes = "110"
輸出:[1,1,3]
解釋:每個盒子對應的最小操作數(shù)如下:
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'

方法一:數(shù)學思維

首先遍歷一遍原始數(shù)組,求出將所有小球全部移動到下標0的話所需要的步驟。同時,記錄下來從下標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;

接下來我們再次遍歷數(shù)組,如果某個元素的上一個元素是1,那么這個元素左邊的1的數(shù)量就會加一,因此left1++

這時候,這個盒子和上一個盒子相比,這一個盒子左邊*的所有1需要移動的步數(shù)都+1,這一個盒子左邊共有left11,因此cnt += left1。

這時候,這個盒子和上一個盒子相比,上一個盒子右邊的所有1需要移動的步數(shù)都-1,上一個盒子右邊共有right1個1,因此cnt -= right1

之后,如果這個盒子初始值也是1的話,再在遍歷下一個元素之前提前更新right1的值(right1--

  • 時間復雜度O(n)
  • 空間復雜度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;
    }
};

運行結果還不錯:

以上就是C++ LeetCode1769移動所有球到每個盒子所需最小操作數(shù)示例的詳細內(nèi)容,更多關于C++ 移動球到盒子最小操作數(shù)的資料請關注腳本之家其它相關文章!

相關文章

  • C語言中循環(huán)嵌套的應用方式

    C語言中循環(huán)嵌套的應用方式

    這篇文章主要介紹了C語言中循環(huán)嵌套的應用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • c++實現(xiàn)哈希桶的步驟

    c++實現(xiàn)哈希桶的步驟

    本文主要介紹了c++實現(xiàn)哈希桶的步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • C/C++數(shù)據(jù)對齊詳細解析

    C/C++數(shù)據(jù)對齊詳細解析

    通常我們在寫代碼的時候是不需要考慮對齊的影響的,都是依賴編譯器來為我們選擇適合的對齊策略,我們也可以通過傳遞給編譯器預編譯指令來指定數(shù)據(jù)對齊的方法
    2013-10-10
  • C++三元表達式詳情

    C++三元表達式詳情

    這篇文章主要介紹了C++三元表達式,文章圍繞C++三元表達式的相關資料展開詳細內(nèi)容,需要的朋友可以參考一下,希望多你有所幫助
    2021-11-11
  • C語言結構體,枚舉,聯(lián)合體詳解

    C語言結構體,枚舉,聯(lián)合體詳解

    下面小編就為大家?guī)硪黄媪私釩語言結構體,枚舉,聯(lián)合體。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09
  • C語言二叉樹層序遍歷

    C語言二叉樹層序遍歷

    這篇文章主要介紹了C語言二叉樹層序遍歷,文章基于C語言的相關資料展開詳細的文章內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-04-04
  • C++ 基礎教程之虛函數(shù)實例代碼詳解

    C++ 基礎教程之虛函數(shù)實例代碼詳解

    虛函數(shù)在 c++ 的繼承體系中是一個非常重要概念,讓我們可以在子類中復寫父類的方法。這篇文章主要介紹了C++ 基礎教程之虛函數(shù)實例代碼的相關資料,需要的朋友可以參考下
    2020-02-02
  • 基于C++ OpenCV制作電子相冊查看器

    基于C++ OpenCV制作電子相冊查看器

    這篇文章主要介紹了如何使用OpenCV C++ 制作電子相冊查看器。類似于win10系統(tǒng)的“照片”功能。感興趣的小伙伴可以跟隨小編一起學習一下
    2022-01-01
  • C/C++實操True and false詳解

    C/C++實操True and false詳解

    這篇文章主要給大家介紹了關于Python中常用的數(shù)據(jù)類型bool(布爾)類型的兩個值:True和False的相關資料,通過示例代碼給大家進行了解惑,讓對這兩個值有所疑惑的朋友們能有起到一定的幫助,需要的朋友下面來一起看看吧。
    2021-09-09
  • 解決C語言數(shù)組元素循環(huán)右移的問題

    解決C語言數(shù)組元素循環(huán)右移的問題

    今天小編就為大家分享一篇解決C語言數(shù)組元素循環(huán)右移的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評論

桦南县| 永康市| 双江| 湖南省| 南川市| 洛川县| 靖西县| 苗栗市| 瑞安市| 大化| 镇坪县| 岑巩县| 翁源县| 潢川县| 上林县| 青州市| 滨州市| 宝鸡市| 松原市| 青浦区| 崇仁县| 长武县| 宾川县| 忻城县| 河南省| 邛崃市| 丽江市| 天气| 灌南县| 南投县| 苏尼特右旗| 河间市| 昌宁县| 富源县| 连云港市| 湾仔区| 元氏县| 尼勒克县| 金川县| 曲周县| 丹寨县|