Jadual Kandungan
Contoh
Arahan
Kaedah 2
Algoritma
Output
Kesimpulan
Rumah pembangunan bahagian belakang C++ Urutan tidak bertambah terpanjang dalam rentetan binari

Urutan tidak bertambah terpanjang dalam rentetan binari

Sep 07, 2023 pm 11:13 PM
rentetan binari paling lama susulan yang tidak meningkat

Urutan tidak bertambah terpanjang dalam rentetan binari

Dalam masalah ini, kita perlu mencari urutan tidak bertambah terpanjang bagi rentetan yang diberikan.

Tidak bertambah bermakna watak sama ada sama atau dalam susunan menurun. Memandangkan rentetan binari hanya mengandungi "0" dan "1", rentetan yang terhasil hendaklah sama ada bermula dengan "1" dan berakhir dengan "0", atau bermula dan berakhir dengan "0" atau "1".

Untuk menyelesaikan masalah ini, kami akan mengira awalan "1" dan akhiran "0" pada setiap kedudukan rentetan dan mencari jumlah maksimum awalan "1" dan akhiran "0".

Pernyataan Masalah - Kami diberi rentetan binari str. Kita perlu mencari urutan tidak bertambah terpanjang daripada rentetan yang diberikan.

Contoh

Input –  str = "010100"
Salin selepas log masuk
Output – 4
Salin selepas log masuk

Arahan

Jujukan tidak bertambah yang paling lama ialah "1100".

Input –  str = "010110010"
Salin selepas log masuk
Output – 6
Salin selepas log masuk

Arahan

Jujukan tidak bertambah terpanjang ialah "111000".

Input –  str = ‘00000000’
Salin selepas log masuk
Output – 8
Salin selepas log masuk

Arahan

Jujukan tidak bertambah terpanjang ialah '00000000', yang sama dengan rentetan yang diberikan.

Kaedah 1

Dalam kaedah ini kita akan menyimpan kiraan awalan '1' dan akhiran '0' untuk setiap indeks dalam tatasusunan. Selepas itu, kami mendapat nilai daripada indeks yang sama dalam kedua-dua tatasusunan, tambahkannya, dan cari jumlah maksimum.

Algoritma

  • Langkah 1 - Tentukan tatasusunan pra1 dan akhiran0 untuk menyimpan awalan 1 dan akhiran 0. Selain itu, mulakan semua elemen tatasusunan kepada 0.

  • Langkah 2 - Gunakan gelung for untuk lelaran melalui rentetan dan hitung awalan 1 untuk setiap indeks. Jika i > 0, maka nilai elemen sebelumnya ditambah pada elemen semasa.

  • Langkah 3 - Jika aksara semasa ialah "1", tambah 1 pada nilai semasa pra1s[i].

  • Langkah 4 - Sekarang, hitung akhiran 0 dalam rentetan yang diberikan. Lintas rentetan bermula dari hujung.

  • Langkah 5 - Jika nilai "I" tidak sama dengan "n – 1", maka dapatkan nilai elemen "I + 1" dan tambahkannya pada elemen semasa.

  • Langkah 6 - Jika elemen semasa ialah "0", tambah 1 pada elemen semasa.

  • Langkah 7 - Sekarang, mulakan pembolehubah "res" dengan 0.

  • Langkah 8 - Ulangi "pre1s" dan "suffix0s" menggunakan gelung.

  • Langkah 9 - Dapatkan nilai daripada indeks ke-i dalam tatasusunan "pre1s" dan "suffix0s" dan tambahkannya bersama-sama. Selain itu, jika "jumlah" lebih besar daripada nilai semasa pembolehubah "res", nilai pembolehubah "res" ditukar dengan nilai "jumlah".

  • Langkah 10 - Kembalikan nilai pembolehubah "res".

Contoh

Untuk input '010100', tatasusunan awalan ialah [0, 1, 1, 2, 2, 2] dan tatasusunan akhiran 0 ialah [4, 3, 3, 2, 2, 1]. Tatasusunan jumlah ialah [4, 4, 4, 4, 4, 1] dan nilai maksimum dalam tatasusunan jumlah ialah 4. Oleh itu, jawapannya ialah 4.

#include <bits/stdc++.h>
using namespace std;
int getMaxLength(string str, int n){
   // To store the prefix count of '1's and suffix count of '0's
   int pre1s[n] = {0},
      suffix0s[n] = {0};
   for (int i = 0; i < n; i++){
   
      // get the prefix count of '1's
      if (i > 0){
         pre1s[i] += pre1s[i - 1];
      }
      
      // If the current character is '1', then update the pre1s array by adding 1; else, keep it as it is.
      if (str[i] == '1'){
         pre1s[i] += 1;
      }
   }
   
   // get suffix count of '0's
   for (int i = n - 1; i >= 0; i--) {
   
      // add the suffix count of '0's
      if (i != n - 1)
         suffix0s[i] += suffix0s[i + 1];
         
      // If the current character is '0', then update the suffix0s array by adding 1; else, keep it as it is.
      if (str[i] == '0')
         suffix0s[i] += 1;
   }
   
   // to store the final result value
   int res = 0;
   
   // iterate over the pre1s[] and suffix0s[] array and find the maximum value of pre1s[i] + suffix0s[i]
   for (int i = 0; i < n; i++){
      res = max(res, pre1s[i] + suffix0s[i]);
   }
   
   // Return the result
   return res;
}

// Driver Code
int main(){
   string str = "010100";
   int N = str.length();
   cout << "The length of the longest non-increasing subsequence in the given binary string is - " << getMaxLength(str, N);
   return 0;
}
Salin selepas log masuk

Output

The length of the longest non-increasing subsequence in the given binary string is - 4
Salin selepas log masuk

Kerumitan masa - O(N) kerana kita perlu memulakan tatasusunan dengan awalan 1 dan akhiran 0.

Kerumitan ruang - O(N) kerana kami menyimpan awalan 1 dan akhiran 0 dalam tatasusunan

Kaedah 2

Dalam kaedah ini kita akan mengira jumlah sifar terlebih dahulu. Selepas itu, kami mula mengulang melalui rentetan, terus mengira "1" s, dan jika 0 ditemui, mengurangkannya dengan "0" s. Selain itu, kami menambah kiraan 0 dan 1 dalam setiap lelaran dan mencari nilai terhasil maksimum.

Algoritma

  • Langkah 1 - Tentukan pembolehubah 'count1', 'count0' dan 'res' dan mulakannya dengan 0 untuk menyimpan kiraan 1, 0 dan hasil akhir masing-masing.

  • Langkah 2 - Kira jumlah bilangan sifar dengan menggelung melalui rentetan dan menyimpannya dalam pembolehubah "count0".

  • Langkah 3 - Sekarang, ulangi rentetan menggunakan gelung.

  • Langkah 4 - Dalam gelung, jika aksara semasa ialah "1", tingkatkan nilai "count1" sebanyak 1, jika tidak kurangkan nilai "count0" sebanyak 1.

  • Langkah 5 - Selain itu, simpan nilai maksimum daripada "res" dan "count0 + count1" ke dalam pembolehubah "res".

  • Langkah 6 - Apabila gelung ditamatkan, kembalikan nilai pembolehubah "res".

Contoh

#include <bits/stdc++.h>
using namespace std;
int getMaxLength(string str, int n){
   int count1 = 0, count0 = 0;
   int res = 0;
   // counting total zeros in the string
   for (int i = 0; i < n; i++){
      if (str[i] == '0')
         count0++;
   }
   
   // counting 1s from left, subtracting zeros from total zeros and adding both counts.
   for (int i = 0; i < n; i++){
      if (str[i] == '1')
         count1++;
      else
         count0--;
      res = max(res, count1 + count0);
   }
   return res;
}
int main(){
   string str = "010110010";
   int N = str.length();
   cout << "The length of the longest non-increasing subsequence in the given binary string is - " << getMaxLength(str, N);
   return 0;
}
Salin selepas log masuk

Output

The length of the longest non-increasing subsequence in the given binary string is - 6
Salin selepas log masuk

Kerumitan Masa - O(N) semasa kita mengira jumlah sifar dalam rentetan dan melintasi rentetan untuk mencari urutan terpanjang.

Kerumitan ruang - O(1)

Kesimpulan

Di sini, kedua-dua kaedah mempunyai kerumitan masa yang sama tetapi kerumitan ruang yang berbeza. Kaedah kedua menggunakan ruang malar apabila kami mengoptimumkan kod, tetapi kaedah pertama menggunakan ruang dinamik untuk menyimpan jumlah bilangan awalan 1 dan akhiran 0.

Atas ialah kandungan terperinci Urutan tidak bertambah terpanjang dalam rentetan binari. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyemak masa apabila Xiaohongshu mengeluarkan video? Apakah masa paling lama yang diperlukan untuk menyiarkan video? Bagaimana untuk menyemak masa apabila Xiaohongshu mengeluarkan video? Apakah masa paling lama yang diperlukan untuk menyiarkan video? Mar 21, 2024 pm 04:26 PM

Sebagai platform perkongsian gaya hidup, Xiaohongshu adalah tempat semakin ramai pengguna memilih untuk menerbitkan kandungan video mereka sendiri dan berkongsi kehidupan harian mereka dengan pengguna lain. Ramai pengguna mungkin menghadapi masalah semasa menyiarkan video: Bagaimana untuk menyemak masa apabila mereka atau orang lain menyiarkan video? 1. Bagaimana untuk menyemak masa apabila Xiaohongshu mengeluarkan video? 1. Semak masa anda menyiarkan video Untuk menyemak masa anda menyiarkan video, anda mesti membuka aplikasi Xiaohongshu dan log masuk ke akaun peribadi anda. Di bahagian bawah antara muka laman utama peribadi, akan ada pilihan bertanda "Penciptaan". Selepas mengklik untuk masuk, anda akan melihat lajur yang dipanggil "Video". Di sini anda boleh menyemak imbas senarai semua video yang diterbitkan dan menyemak dengan mudah apabila ia diterbitkan. Terdapat butang "Lihat Butiran" di sudut kanan atas setiap video Selepas mengklik

Urutan tidak bertambah terpanjang dalam rentetan binari Urutan tidak bertambah terpanjang dalam rentetan binari Sep 07, 2023 pm 11:13 PM

Dalam masalah ini, kita perlu mencari urutan tidak bertambah terpanjang bagi rentetan yang diberikan. Tidak bertambah bermakna aksara sama ada sama atau dalam susunan menurun. Memandangkan rentetan binari hanya mengandungi "0" dan "1", rentetan yang terhasil hendaklah sama ada bermula dengan "1" dan berakhir dengan "0", atau bermula dan berakhir dengan "0" atau "1". Untuk menyelesaikan masalah ini, kami akan mengira awalan "1" dan akhiran "0" pada setiap kedudukan rentetan dan mencari jumlah maksimum awalan "1" dan akhiran "0". Pernyataan Masalah - Kami diberi rentetan binari str. Kita perlu mencari urutan tidak bertambah terpanjang daripada rentetan yang diberikan. Contoh Input–str="010100"Output–4 menggambarkan bukan rekursif terpanjang

Dalam PHP, fungsi fungsi pack() adalah untuk menukar data kepada rentetan binari Dalam PHP, fungsi fungsi pack() adalah untuk menukar data kepada rentetan binari Aug 31, 2023 pm 02:05 PM

Fungsi pack() mengemas data ke dalam rentetan binari. Pek sintaks(format,args) Format parameter - format untuk digunakan. Berikut ialah nilai yang mungkin - a - rentetan berlapik NUL A - rentetan empuk ruang h - rentetan perenambelasan, nibble rendah dahulu H - rentetan perenambelasan, nibble tinggi dahulu c - char C yang ditandatangani - char s yang tidak ditandatangani - ditandatangani pendek (sentiasa 16 bit , pesanan bait mesin) S - pendek tidak ditandatangani (sentiasa 16 bit, susunan bait mesin) n - pendek tidak ditandatangani (sentiasa 16 bit, susunan bait endian besar) v - pendek tidak ditandatangani (sentiasa 16 bit, susunan bait endian kecil) i - integer bertanda (bergantung pada saiz mesin dan susunan bait) I - Tiada integer yang ditandatangani (bergantung pada

Ditulis dalam C++, cari bilangan pilih atur unik rentetan binari bermula dengan 1 Ditulis dalam C++, cari bilangan pilih atur unik rentetan binari bermula dengan 1 Sep 05, 2023 am 09:01 AM

Dalam masalah yang diberikan, kita diberi rentetan yang terdiri daripada 0 dan 1 kita perlu mencari jumlah bilangan semua pilih atur bermula dengan 1. Oleh kerana jawapannya mungkin jumlah yang besar, kami mengambilnya modulo 1000000007 dan mengeluarkannya. Input:str="10101001001"Output:210Input:str="101110011"Output:56 Kami akan menyelesaikan masalah ini dengan menggunakan beberapa matematik gabungan dan menyediakan beberapa formula. Kaedah Penyelesaian Dalam kaedah ini kita akan mengira bilangan 0 dan 1. Sekarang andaikan n ialah nombor 1 yang muncul dalam rentetan kami dan m ialah bilangan 0 yang muncul dalam rentetan kami

Menyemak sama ada rentetan boleh membentuk rentetan palindrom dengan menukar pasangan aksara pada indeks dengan aksara tidak sama dalam rentetan binari Menyemak sama ada rentetan boleh membentuk rentetan palindrom dengan menukar pasangan aksara pada indeks dengan aksara tidak sama dalam rentetan binari Sep 02, 2023 pm 08:09 PM

Pernyataan Masalah Kami mempunyai rentetan str dan rentetan binari B. Panjang kedua-dua rentetan adalah sama dengan N. Kita perlu menyemak sama ada kita boleh membuat rentetan str rentetan palindrom dengan menukar aksaranya beberapa kali pada mana-mana pasangan indeks yang mengandungi aksara tidak sama dalam rentetan B. Contoh Contoh Input str='AAS' B='101' Output 'YA' Terjemahan Cina bagi Penjelasan ialah: Penjelasan Kita boleh menukar str[1] dan str[2] kerana B[1] dan B[2] tidak sama . Rentetan akhir boleh menjadi 'ASA'. Input str=‘AASS’ B=‘1111’ dan keluaran ‘No’ Terjemahan Bahasa Cina bagi Explanation ialah: Penjelasan bahawa kita tidak boleh membuat string palindrom,

Maksimumkan fungsi yang diberikan dengan memilih subrentetan panjang yang sama daripada rentetan binari yang diberikan Maksimumkan fungsi yang diberikan dengan memilih subrentetan panjang yang sama daripada rentetan binari yang diberikan Aug 28, 2023 am 09:49 AM

Memandangkan dua rentetan binari str1 dan str2 yang sama panjang, kita perlu memaksimumkan nilai fungsi yang diberikan dengan memilih subrentetan daripada rentetan yang diberikan dengan panjang yang sama. Fungsi yang diberikan adalah seperti ini - fun(str1,str2)=(len(substring))/(2^xor(sub1,sub2)). Di sini, len(substring) ialah panjang subrentetan pertama dan xor(sub1,sub2) ialah XOR substring yang diberikan, ini mungkin kerana ia adalah rentetan binari. Contoh Input1:stringstr1=10110&stringstr2=11101Output:3 menggambarkan kami

Cari pemain dengan bilangan sifar paling sedikit selepas mengosongkan rentetan binari (dengan mengalih keluar subrentetan bukan kosong) Cari pemain dengan bilangan sifar paling sedikit selepas mengosongkan rentetan binari (dengan mengalih keluar subrentetan bukan kosong) Sep 16, 2023 am 10:21 AM

Dalam artikel ini, kita akan membincangkan masalah menarik yang berkaitan dengan bidang manipulasi rentetan dan teori permainan: "Kosongkan rentetan binari dengan mengeluarkan subrentetan bukan kosong dan cari pemain dengan baki sifar paling sedikit". Soalan ini meneroka konsep menggunakan rentetan binari untuk permainan kompetitif. Matlamat kami adalah untuk mencari pemain dengan baki 0 ​​paling sedikit pada penghujung permainan. Kami akan membincangkan isu ini, menyediakan pelaksanaan kod C++, dan menerangkan konsep melalui contoh. Memahami penyataan masalah Dua pemain diberikan rentetan binari dan mereka bermain secara bergilir-gilir. Pada setiap giliran, pemain mengalih keluar subrentetan bukan kosong yang mengandungi sekurang-kurangnya satu "1". Permainan berakhir apabila rentetan menjadi kosong atau tiada "1" dalam rentetan. Pemain yang tidak dapat mengambil tindakan akan kehilangan permainan. Tugasnya adalah untuk mencari 0 akhir

Hitung rentetan perduaan panjang N yang merupakan gabungan berulang subrentetan Hitung rentetan perduaan panjang N yang merupakan gabungan berulang subrentetan Sep 07, 2023 am 10:13 AM

Tujuan artikel ini adalah untuk melaksanakan program untuk mengira bilangan rentetan binari panjang N yang dibentuk oleh penggabungan berulang subrentetan. Matlamatnya adalah untuk menentukan bilangan rentetan perduaan panjang N boleh dicipta dengan berulang kali menggabungkan subrentetan individu bagi teks yang diberikan, dengan N ialah integer positif. Pernyataan Masalah Laksanakan atur cara yang mengira bilangan rentetan binari panjang N yang menggabungkan subrentetan berulang kali. Contoh Contoh 1 Letus mengambil Input, N = 3 Output: 2 Terjemahan Cina bagi Penjelasan ialah: Penjelasan Berikut menyenaraikan rentetan binari yang boleh dilaksanakan dengan panjang N = 3, di mana subrentetan berulang kali digabungkan. "000":Thesubstr

See all articles