งานคือหาผลคูณของคู่สมาชิกติดกันทุกคู่ในอาร์เรย์ สำหรับอาร์เรย์ขนาด n จะมี n-1 คู่
ตัวอย่าง
ตัวอย่างที่ 1
Input: arr[] = {1, 2, 3, 4}
คู่: (1,2), (2,3), (3,4)
ผลคูณ: 2, 6, 12
Output: 2 6 12
ตัวอย่างที่ 2
Input: arr[] = {9, 5, 1, 2, 6, 10}
คู่: (9,5), (5,1), (1,2), (2,6), (6,10)
ผลคูณ: 45, 5, 2, 12, 60
Output: 45 5 2 12 60
แนวทางแก้ปัญหา
- วนลูป
iจาก 0 ถึงn-2 - คำนวณ
product = arr[i] * arr[i+1] - พิมพ์หรือเก็บผลลัพธ์
ตัวอย่างโค้ด
#include <iostream>
#include <vector>
using namespace std;
vector<long long> pairwiseProducts(const vector<int>& arr) {
vector<long long> result;
int n = arr.size();
for (int i = 0; i < n - 1; i++) {
result.push_back(1LL * arr[i] * arr[i + 1]);
}
return result;
}
void printPairwiseProducts(const vector<int>& arr) {
int n = arr.size();
for (int i = 0; i < n - 1; i++) {
cout << 1LL * arr[i] * arr[i + 1];
if (i < n - 2) cout << " ";
}
cout << endl;
}
int main() {
vector<int> arr = {2, 4, 6, 8, 10, 12, 14};
cout << "Pairwise products: ";
printPairwiseProducts(arr);
// หรือเก็บใน vector
auto products = pairwiseProducts(arr);
cout << "As vector: ";
for (long long p : products) cout << p << " ";
cout << endl;
return 0;
}
ผลลัพธ์
Pairwise products: 8 24 48 80 120 168 As vector: 8 24 48 80 120 168
การประยุกต์ใช้
- Signal Processing: Autocorrelation, Convolution
- Time Series: ความแตกต่างระหว่างจุดติดกัน (differencing)
- Image Processing: Edge detection (gradient)
- Algorithms: Sliding window size 2
ความซับซ้อน
- เวลา: O(N)
- พื้นที่: O(1) เพิ่มเติม (หากแค่พิมพ์), O(N) หากเก็บทั้งหมด
ขยายความ: ผลคูณของคู่ที่ห่างกัน k (Stride k)
vector<long long> strideProducts(const vector<int>& arr, int k) {
vector<long long> result;
for (int i = 0; i + k < arr.size(); i++) {
result.push_back(1LL * arr[i] * arr[i + k]);
}
return result;
}