เราได้รับอาเรย์ความยาว N ที่มีแค่ 0 และ 1 ค่า 1 แทนรถที่เคลื่อนที่ไปทิศตะวันตก และค่า 0 แทนรถที่เคลื่อนที่ไปทิศตะวันออก
เรานับรถที่ผ่านกันเป็น 1 หากคู่ของรถ A และรถ B เป็นอย่างที่ 0<=A ที่นี่ A เคลื่อนที่ไปตะวันออกและ B เคลื่อนที่ไปตะวันตก สุดท้ายเราจะนับคู่ของ (0,1) ที่ดัชนีของ 0 น้อยกว่าดัชนีของ 1
มาดูตัวอย่าง
อินพุต − arr[] = {1,0,1,0,1}
เอาต์พุต − จำนวนคู่รถที่ผ่านกัน คือ 3
คำอธิบาย − คู่ของ (0,1) ที่ดัชนีของ 0 น้อยกว่า 1 คือ − (arr[1],arr[2]), (arr[1],arr[4]), (arr[3],arr[4])
อินพุต − arr[] = {1,0,0,0,0}
เอาต์พุต − จำนวนคู่รถที่ผ่านกัน คือ 0
คำอธิบาย − ไม่มีคู่ของ (0,1) ที่ดัชนีของ 0 น้อยกว่า 1
แนวทางที่ใช้ในโปรแกรม
เราจะใช้สองวิธี วิธีแรกแบบง่ายด้วยลูป FOR สองชั้น เริ่มเดินทางอาเรย์ เมื่อเจอ 0 เดินทางอาเรย์จากจุดนั้นถึงท้ายอีกครั้งและเพิ่ม count เมื่อเจอ 1
- รับอาเรย์
arr[]ที่มี 0 และ 1 - ฟังก์ชัน
count_cars(int arr[], int size)รับอาเรย์และความยาว คืนจำนวนรถที่ผ่านกัน - กำหนด
countเริ่มต้น 0 - เดินทางอาเรย์จากดัชนี
i=0ถึงi<length-1 - ถ้า
arr[i]เป็น 0 เดินทางอาเรย์อีกครั้งจากดัชนีj=i+1ถึงj<length - สำหรับแต่ละ
arr[j]เป็น 1 เพิ่มcountเพราะคู่(arr[i],arr[j])เป็น(0,1)และi<j - ท้ายสุดเราจะได้จำนวนรวม
- คืน
count
แนวทางที่มีประสิทธิภาพ
ในแนวทางนี้เราจะเดินทางอาเรย์จากท้าย นับ 1 ทั้งหมดจากท้าย สำหรับ 0 แรก (จากท้าย) จำนวนคู่จะเป็นจำนวน 1 ที่นับได้คือ temp
- รับอาเรย์
arr[]ที่มี 0 และ 1 - ฟังก์ชัน
count_cars(int arr[], int size)รับอาเรย์และความยาว คืนจำนวนรถที่ผ่านกัน - กำหนด
countเริ่มต้น 0 - เดินทางอาเรย์จากท้ายด้วยลูป while จน
size>=1 - ถ้า
arr[size-1]เป็น 1 เพิ่มตัวแปรtempสำหรับจำนวน 1 ที่เจอมาแล้ว - มิฉะนั้น เป็น 0 (ซึ่งมีดัชนีต่ำกว่า 1 ทั้งหมดคือ
temp) คู่จะเป็นtempกำหนดcount = count+temp - ลด
sizeสำหรับสมาชิกถัดไป - ท้ายสุดเราจะได้จำนวนรวม
- คืน
count
ตัวอย่าง (วิธีง่าย)
#include<bits/stdc++.h>
using namespace std;
int count_cars(int arr[], int size){
int count = 0;
for (int i=0; i<size-1; i++){
if(arr[i] == 0){
for (int j=i+1; j<size; j++)
if (arr[j]==1){
count++;
}
}
}
return count;
}
int main(){
int arr[] = {1, 1, 0, 0, 1};
int size = sizeof(arr)/sizeof(arr[0]);
cout<<"Count of passing car pairs are: "<<count_cars(arr, size);
return 0;
}
เอาต์พุต
หากรันโค้ดด้านบนจะได้ผลลัพธ์ดังนี้ −
Count of passing car pairs are: 2
ตัวอย่าง (แนวทางมีประสิทธิภาพ)
#include<bits/stdc++.h>
using namespace std;
int count_cars(int arr[], int size){
int count = 0;
int temp = 0;
while (size >= 1){
if (arr[size-1] == 1){
temp++;
} else {
count = count + temp;
}
size--;
}
return count;
}
int main(){
int arr[] = {1, 1, 0, 1, 1};
int size = sizeof(arr)/sizeof(arr[0]);
cout<<"Count of passing car pairs are: "<<count_cars(arr, size);
return 0;
}
เอาต์พุต
หากรันโค้ดด้านบนจะได้ผลลัพธ์ดังนี้ −
Count of passing car pairs are: 2