在C++中查詢二進位制表示中透過一次翻轉可獲得的最長1序列
假設我們有一個整數n。在其中,我們可以進行一位翻轉以生成最長的1序列。假設數字是13,則二進位制表示為1101。如果我們進行一位翻轉,將0變為1,它將變為1111。這是最長的1序列。
為了解決這個問題,我們將遍歷給定數字的位。我們將跟蹤當前的1序列長度和之前的1序列長度。當找到一個零時,更新之前的長度。因此,如果下一位是1,則之前的長度應設定為當前長度。如果下一個是0,則再次將之前設定為0。
示例
#include<iostream>
using namespace std;
int singleFlipMaxOnes(unsigned number) {
if (~number == 0)
return 8*sizeof(int);
int curr = 0, prev = 0, max_size = 0;
while (number!= 0) {
if ((number & 1) == 1)
curr++;
else if ((number & 1) == 0) {
prev = (number & 2) == 0? 0 : curr;
curr = 0;
}
max_size = max(prev + curr, max_size);
number >>= 1;
}
return max_size+1;
}
int main() {
cout << "Maximum length of the sequence with 1s: " << singleFlipMaxOnes(13);
}輸出
Maximum length of the sequence with 1s: 4
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP