Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาการดำเนินการขั้นต่ำที่จำเป็นในการทำให้ Array สวยงามใน C++


ในปัญหานี้ เราได้รับ Binary Array bin[] ซึ่งประกอบด้วย n ค่าไบนารีซึ่งมีค่าเท่ากับ 0 และ 1 หน้าที่ของเราคือค้นหาการดำเนินการขั้นต่ำที่จำเป็นในการทำให้ Array สวยงาม

อาร์เรย์ที่สวยงามเป็นอาร์เรย์ไบนารีชนิดพิเศษซึ่งประกอบด้วยรูปแบบของ 0 และ 1 สำรอง

คำอธิบายปัญหา − เราจำเป็นต้องค้นหาการดำเนินการของตัวเลขที่จำเป็นในการทำให้อาร์เรย์สวยงาม การดำเนินการประกอบด้วยขั้นตอนเหล่านี้ -

ขั้นตอนที่ 1 − ตัดอาร์เรย์ออกเป็นสองส่วน

ขั้นตอนที่ 2 − กลับด้านใดด้านหนึ่งของทั้งสองส่วน

ขั้นตอนที่ 3 − เข้าร่วมแล้วแบ่งครึ่งกลับ

เราจะนับจำนวนการดำเนินการที่จำเป็นเพื่อให้แน่ใจว่าอาร์เรย์จะกลายเป็นอาร์เรย์ที่สวยงาม

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

อินพุต

bin[] = {1, 0, 1, 0, 0, 1}

ผลลัพธ์

1

คำอธิบาย

เราจะตัดอาร์เรย์ สร้าง subarray bin[4, 5] ย้อนกลับและรวมกลับ

แนวทางการแก้ปัญหา

วิธีแก้ปัญหาขึ้นอยู่กับการหาจำนวนขั้นต่ำของการทำงานของสวิตช์ซึ่งเท่ากับจำนวนศูนย์ที่ต่อเนื่องกัน กรณีพื้นฐานคือ −

ถ้าขนาดของอาร์เรย์เท่ากับ 1 แสดงว่าอาร์เรย์ที่สวยงาม หากขนาดของอาร์เรย์เป็นจำนวนคี่ อาร์เรย์นั้นจะไม่สามารถเป็นอาร์เรย์ที่สวยงามได้

สำหรับความยาวที่เท่ากันทั้งหมด เราจะตรวจสอบจำนวนรวมของศูนย์หรือศูนย์ที่ต่อเนื่องกันซึ่งจะเป็นจำนวนการดำเนินการที่จะดำเนินการ

อัลกอริทึม

Initialise − zeroCount , oneCount, consZero =0

ขั้นตอนที่ 1 − ถ้า ( n =1) ให้คืนค่า 0

ขั้นตอนที่ 2 − ถ้า (n%2 !=0) ให้คืนค่า -1

ขั้นตอนที่ 3 − วนรอบสำหรับ i -> 0 ถึง n-1

ขั้นตอนที่ 3.1 − ถ้า bin[i] ==bin[i+1] ==0, consZero++.

ขั้นตอนที่ 4 − if bin[n-1] ==bin[0] ==0, consZero++.

ขั้นตอนที่ 5 − คืนค่า consZero

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#include <iostream>
using namespace std;
int minOperations(int bin[], int n) {
   if(n == 1)
      return 0;
   if(n%2 != 0)
      return -1;
      int consZero = 0;
   for (int i = 0; i < n; ++i) {
      if (i + 1 < n) {
         if (bin[i] == 0 && bin[i + 1] == 0)
            consZero++;
      }
   }
   if (bin[0] == bin[n - 1] && bin[0] == 0)
      consZero++;
      return consZero;
}
int main() {
   int bin[] = { 1, 0, 1, 0, 0, 1};
   int n = sizeof(bin) / sizeof(bin[0]);
   cout<<"The minimum operations needed to make an Array beautiful is "<<minOperations(bin, n);
   return 0;
}

ผลลัพธ์

The minimum operations needed to make an Array beautiful is 1