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

นับ Subarrays ที่มีองค์ประกอบต่อเนื่องกันต่างกัน 1 ใน C++


เราได้รับอาร์เรย์ arr[] ที่มีจำนวนเต็ม เป้าหมายคือการนับอาร์เรย์ย่อยทั้งหมดของ arr[] โดยที่องค์ประกอบที่ต่อเนื่องกันในแต่ละอาร์เรย์ย่อยต่างกันเพียง 1 เท่านั้น หากอาร์เรย์เป็น [1,2,3] อาร์เรย์ย่อยจะเป็น [1,2], [2,3], [1,2,3] เท่านั้น

ให้เราเข้าใจด้วยตัวอย่าง

ป้อนข้อมูล − arr[] ={ 4,3,2,1 };

ผลผลิต − จำนวน Subarrays ที่มีองค์ประกอบต่อเนื่องกันต่างกันด้วย 1 คือ − 6

คำอธิบาย − Subaarays จะเป็น -

<ก่อน>[4,3], [3,2], [2,1], [4,3,2], [3,2,1], [4,3,2,1] รวม 6.

ป้อนข้อมูล − arr[] ={ 1,5,6,7,9,11 };

ผลผลิต − จำนวน Subarrays ที่มีองค์ประกอบต่อเนื่องกันต่างกันด้วย 1 คือ − 3

คำอธิบาย − Subaarays จะเป็น -

<ก่อน>[5,6], [6,7], [5,6,7]. รวม 3

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

เราจะสำรวจอาร์เรย์โดยใช้ a for a loop จาก i=0 ถึง i<ขนาด. จากนั้นตรวจสอบว่าองค์ประกอบใดแตกต่างกันตามองค์ประกอบที่อยู่ติดกัน 1 หรือไม่ ถ้าใช่ เก็บดัชนีไว้เป็นอันดับแรก ถ้าไม่เช่นนั้นให้นำจำนวนขององค์ประกอบในอาร์เรย์ย่อยเป็นอุณหภูมิ ( first-last +1 ) อาร์เรย์ระหว่างดัชนีแรกและรายการสุดท้ายมีองค์ประกอบต่อเนื่องกันทั้งหมดต่างกันด้วย 1 ดังนั้นอาร์เรย์ย่อยทั้งหมดจะเป็น temp*(temp-1)/2 เพิ่มสิ่งนี้เพื่อนับ อัปเดตดัชนี first=last=i สำหรับอาร์เรย์ถัดไปที่มีองค์ประกอบต่อเนื่องกันทั้งหมด

  • หาอาร์เรย์ arr[] ของตัวเลข

  • ฟังก์ชั่น sub_ele_diff_one(int arr[], int size) รับอาร์เรย์และส่งกลับจำนวนอาร์เรย์ย่อยที่มีองค์ประกอบต่อเนื่องกันแตกต่างกัน 1

  • นับเริ่มต้นเป็น 0

  • เราจะสำรวจอาร์เรย์โดยใช้ a for loops จาก i=0 ถึง I

  • หาตัวแปรสองตัวก่อน ตัวสุดท้ายเป็น 0 สำหรับดัชนีที่องค์ประกอบทั้งหมดอยู่ติดกันและต่างกัน 1 ตัว

  • ตรวจสอบว่า arr[i-1]-arr[i] ==1 OR arr[i]-arr[i-1]==1 หรือไม่ (องค์ประกอบต่างกันด้วย 1) ถ้าจริงให้เพิ่มก่อน

  • หากเงื่อนไขก่อนหน้านี้เป็นเท็จ ดังนั้นองค์ประกอบทั้งหมดในอาร์เรย์ที่ตรงตามเงื่อนไขนี้คือ temp=first-last+1 อาร์เรย์ย่อยที่เป็นไปได้คือ total=temp*(temp-1)/2.

  • ตอนนี้เพิ่มจำนวนรวมของ subarray ที่จะนับนี้

  • อัปเดตดัชนีก่อนและสุดท้ายด้วย I ปัจจุบัน (ดัชนีที่เงื่อนไของค์ประกอบต่อเนื่องล้มเหลว

  • ต่อท้าย for loop if first!=last. ซึ่งหมายความว่าอาร์เรย์ที่เหลือเป็นไปตามเงื่อนไข ใช้ขั้นตอนเดียวกันและเพิ่มยอดรวมเพื่อนับ

  • ที่ส่วนท้ายของลูปทั้งสอง ให้นับกลับเป็นผลลัพธ์

ตัวอย่าง

#include ใช้เนมสเปซ std;int sub_ele_diff_one(int arr[], ขนาด int){ จำนวน int =0, แรก =0, สุดท้าย =0; for (int i =1; i  

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

จำนวน Subarrays ที่มีองค์ประกอบต่อเนื่องกันต่างกัน 1 คือ:2