目錄
問題陳述
方法
範例
輸出
測試案例說明
結論
首頁 後端開發 C++ 最少需要多少次交換才能使給定的子字串中恰好包含K個1

最少需要多少次交換才能使給定的子字串中恰好包含K個1

Aug 25, 2023 pm 11:25 PM
子字串 交換 k個

最少需要多少次交換才能使給定的子字串中恰好包含K個1

找到子字串剛好包含 K 個 1 所需的最小交換次數是電腦科學和程式設計領域的常見問題。在這篇文章中,我們將深入研究這個問題並為其提供 C 解決方案。這個問題在各個領域都有應用,包括字串操作、資料結構優化和麵試中的編碼挑戰。

問題陳述

給定一個二進位字串和一個數字 K,任務是找到確保字串的每個子字串恰好都有 K 個 1 所需的最小交換次數。

方法

為了解決這個問題,我們可以使用兩個指標方法和滑動視窗技術。基本想法是維護一個大小為K的窗口,並計算窗口中全1所需的交換次數。

範例

這是一個實作上述方法的 C 函數 -

#include<bits/stdc++.h>
using namespace std;

int minSwaps(string s, int K) {
   int n = s.length();
   vector<int> onesPrefix(n, 0);
   if(s[0] == '1') onesPrefix[0] = 1;
   
   for(int i = 1; i < n; i++) {
      onesPrefix[i] = onesPrefix[i-1];
      if(s[i] == '1') onesPrefix[i]++;
   }
   
   int ans = INT_MAX;
   for(int i = 0; i <= n - K; i++) {
      int j = i + K - 1;
      int ones = onesPrefix[j] - ((i == 0) ? 0 : onesPrefix[i - 1]);
      ans = min(ans, K - ones);
   }
   
   return ans;
}

int main() {
   string s = "10010110";
   int K = 3;
   cout << "Minimum number of swaps = " << minSwaps(s, K) << endl;
   return 0;
}
登入後複製

輸出

Minimum number of swaps = 1
登入後複製

測試案例說明

假設字串為“10010110”,K = 3。

在初始二進位字串「10010110」中,我們想要讓每個大小為3的子字串剛好有3個1。例如,子字串“100”需要2次交換才能變成“111”。同樣,子字串「001」也需要2次交換。透過迭代字串,我們發現子字串「101」所需的最小交換次數為 1。

結論

這個問題是一個很好的例子,說明如何將演算法、資料結構和 C 語言的理解結合起來解決複雜的問題。理解和實現此類問題對於軟體工程師來說非常有益,尤其是在程式設計面試和競爭性程式設計中。

以上是最少需要多少次交換才能使給定的子字串中恰好包含K個1的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在Java中遞歸地計算子字串出現的次數 在Java中遞歸地計算子字串出現的次數 Sep 17, 2023 pm 07:49 PM

給定兩個字串str_1和str_2。目標是使用遞歸過程計算字串str1中子字串str2的出現次數。遞歸函數是在其定義中呼叫自身的函數。如果str1是"Iknowthatyouknowthatiknow",str2是"know"出現次數為-3讓我們透過範例來理解。例如輸入str1="TPisTPareTPamTP",str2="TP";輸出Countofoccurrencesofasubstringrecursi

如何在 Ubuntu 上新增交換空間 22.04 LTS 如何在 Ubuntu 上新增交換空間 22.04 LTS Feb 20, 2024 am 11:12 AM

交換空間在Linux系統中扮演著重要角色,特別是在系統記憶體不足時。它充當一個備用的記憶體儲存空間,可以幫助系統平穩運行,即使在負載高的情況下也能保持穩定性。本文為您提供了在Ubuntu22.04LTS上新增交換空間的詳細指南,以確保您的系統效能經過最佳化並能應付各種工作負載。了解交換空間交換空間提供虛擬內存,用於補充系統的實體RAM。當系統的RAM不足時,核心會將資料交換到磁碟,以防止記憶體不足和系統崩潰。 Linux系統常用交換空間來處理這種情況。同時運行多個內存密集型應用程式處理非常大的檔案或數據

MySQL中如何使用LOCATE函數來尋找子字串在字串中的位置 MySQL中如何使用LOCATE函數來尋找子字串在字串中的位置 Jul 25, 2023 am 09:45 AM

MySQL中如何使用LOCATE函數來尋找子字串在字串中的位置在MySQL中,有許多函數可以用來處理字串。其中,LOCATE函數是一種非常有用的函數,可以用來尋找子字串在字串中的位置。 LOCATE函數的語法如下:LOCATE(substring,string,[position])其中,substring為要找的子字串,string為要在其中

strtok_r()函數是C語言中的一個函數,它的作用是將字串分割成一系列子字串 strtok_r()函數是C語言中的一個函數,它的作用是將字串分割成一系列子字串 Aug 26, 2023 am 09:45 AM

該函數與strtok()函數類似。唯一的關鍵區別是_r,它被稱為可重入函數。可重入函數是執行過程中可以被中斷的函數。這種類型的函數可用於恢復執行。因此,可重入函數是線程安全的,這意味著它們可以安全地被線程中斷,而不會造成任何損害。 strtok_r()函數有一個稱為上下文的額外參數。這樣函數就可以在正確的位置恢復。 strtok_r()函數的語法如下:#include<string.h>char*strtok_r(char*string,constchar*limiter,char**

Python程式:交換矩陣中第一個與最後一個元素在列之間的位置 Python程式:交換矩陣中第一個與最後一個元素在列之間的位置 Sep 08, 2023 pm 04:29 PM

矩陣是由許多按行和列形式排列的數字組成的二維數組。 Python沒有任何資料類型來表示矩陣,但我們可以使用嵌套列表或NumPy數組作為矩陣。請參閱以下輸入輸出場景,以了解如何互換矩陣的第一列和最後一列元素。輸入輸出場景假設我們有一個使用列表列表表示的3X3矩陣。輸出矩陣將是交換第一列和最後一列元素的結果矩陣。 Inputmatrix:[1,3,4][4,5,6][7,8,3]Outputmatrix:[4,3,1][4,5,6][3,8,7]讓我們考慮另一個行和列不相等的矩陣。 Inputmatrix:

PHP傳回一個字串在另一個字串中開始位置到結束位置的字串 PHP傳回一個字串在另一個字串中開始位置到結束位置的字串 Mar 21, 2024 am 10:31 AM

這篇文章將為大家詳細講解有關PHP返回一個字符串在另一個字符串中開始位置到結束位置的字符串,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。 PHP中使用substr()函數從字串中擷取子字串substr()函數可從字串中擷取指定範圍內的字元。其語法如下:substr(string,start,length)其中:string:要從中提取子字串的原始字串。 start:子字串開始位置的索引(從0開始)。 length(可選):子字串的長度。如果未指定,則提

PHP8.1新增的str_contains函數:快速判斷子字串是否存在 PHP8.1新增的str_contains函數:快速判斷子字串是否存在 Jul 07, 2023 pm 01:18 PM

PHP8.1新增的str_contains函數:快速判斷子字串是否存在在最新的PHP8.1版本中,新增了一個非常方便的函數str_contains,它的作用是用來快速判斷一個字串是否包含另一個子字串。相較於先前的strpos函數,str_contains函數更加簡潔、易用,且能大幅提升開發效率。本文將向大家介紹str_contains函數的使用方法,並

PHP 正規表示式:如何從字串中提取特定字元到結尾的子字串 PHP 正規表示式:如何從字串中提取特定字元到結尾的子字串 Jun 22, 2023 pm 05:33 PM

正規表示式是一種強大的文字處理工具,它可以用來匹配特定模式的字串。在PHP中,正規表示式常用於字串處理、表單驗證、搜尋和替換等方面。本文將介紹如何使用PHP的正規表示式從字串中提取特定字元到結尾的子字串。首先,讓我們來看一個例子。假設我們有一個字串$str,其中包含多個以「http://」開頭的URL,我們想要提取這些URL,並儲存在一

See all articles