เราได้รับอาร์เรย์ที่มีสมาชิกเป็นจำนวนเต็ม ภารกิจคือคำนวณ subarray จากอาร์เรย์ที่กำหนดก่อน แล้วตรวจสอบว่าสมาชิกใน subarray อยู่ในลำดับเพิ่มขึ้นหรือไม่ ถ้าใช่ เราจะนับ subarray นั้น มิฉะนั้นจะทิ้ง
แนวทางที่นี่คือ หยุดตรวจสอบ subarray ต่อไปหากสมาชิกตำแหน่ง 0 และ 1 ไม่อยู่ในลำดับเพิ่มขึ้น
ตัวอย่างใน C++
Input: int a[] = {1, 7, 5}
Output: จำนวน subarray ที่เพิ่มขึ้นอย่างเคร่งครัดคือ 1
คำอธิบาย - Subarray ที่เป็นไปได้คือ {1,7,5}, {1,7}, {7,5} โดยที่ {1,7} เป็นอาร์เรย์เดียวที่เพิ่มขึ้นอย่างเคร่งครัด
Input: int a[] = {1, 2, 7, 10}
Output: จำนวน subarray ที่เพิ่มขึ้นอย่างเคร่งครัดคือ 6
คำอธิบาย - Subarray ที่เป็นไปได้คือ {{1, 2}, {1, 2, 7}, {1, 2, 7, 10}, {2, 7}, {2, 7, 10} และ {7, 10} และทั้งหมดเพิ่มขึ้นอย่างเคร่งครัด
แนวทางที่ใช้ในโปรแกรมด้านล่าง
- ประกาศอาร์เรย์ รับสมาชิก และส่งข้อมูลให้ฟังก์ชัน countIncSubarrays(a, a.length) พร้อมความยาวอาร์เรย์
- ภายในฟังก์ชัน เริ่มต้นตัวนับ count
- เริ่มลูป FOR i จาก 0 ถึงความยาวอาร์เรย์
- ภายในลูป เริ่มลูป FOR อีกทีจาก j = i+1 ถึงความยาวอาร์เรย์
- ภายในลูป ตรวจสอบ IF a[j] > a[j-1] เพิ่ม count
- ELSE break ลูป เพราะการตรวจสอบลำดับเพิ่มขึ้นล้มเหลว
- ใน main function ผลลัพธ์ถูกบันทึกจากการเรียกฟังก์ชันและพิมพ์เป็นเอาต์พุต
ตัวอย่าง
import java.util.*;
class testqwe {
static int MAX = 4;
static int a[] = new int[MAX];
static Scanner scan = new Scanner(System.in);
static int countIncSubarrays(int a[], int n) {
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (a[j] > a[j - 1])
count++;
else
break;
}
}
return count;
}
public static void main(String[] args) {
for (int i = 0; i < a.length; i++) {
a[i] = scan.nextInt();
}
int result = countIncSubarrays(a, a.length);
System.out.println("Count of strictly increasing subarrays is " + result);
}
}
หากเรารันโค้ดข้างต้น จะได้ผลลัพธ์ดังนี้
ผลลัพธ์
Count of strictly increasing subarrays is 6