เราได้รับอาร์เรย์ 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