最少需要多少次交換才能使給定的子字串中恰好包含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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

矩陣是由許多按行和列形式排列的數字組成的二維數組。 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中使用substr()函數從字串中擷取子字串substr()函數可從字串中擷取指定範圍內的字元。其語法如下:substr(string,start,length)其中:string:要從中提取子字串的原始字串。 start:子字串開始位置的索引(從0開始)。 length(可選):子字串的長度。如果未指定,則提

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

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