#include <stdio.h>
#include <stdbool.h>
// Function to find if two numbers sum to target using two pointers
bool two_pointer_sum(int arr[], int size, int target, int *num1, int *num2) {
int left = 0;
int right = size - 1;
while (left < right) {
int sum = arr[left] + arr[right];
if (sum == target) {
*num1 = arr[left];
*num2 = arr[right];
return true;
} else if (sum < target) {
left++; // move left pointer right to increase sum
} else {
right--; // move right pointer left to decrease sum
}
}
return false;
}
// Brute force approach to find two numbers that sum to target
bool brute_force_sum(int arr[], int size, int target, int *num1, int *num2) {
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (arr[i] + arr[j] == target) {
*num1 = arr[i];
*num2 = arr[j];
return true;
}
}
}
return false;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
int target = 6;
int a, b;
if (two_pointer_sum(arr, size, target, &a, &b)) {
printf("Two Pointer: Pair found (%d, %d)\n", a, b);
} else {
printf("Two Pointer: No pair found\n");
}
if (brute_force_sum(arr, size, target, &a, &b)) {
printf("Brute Force: Pair found (%d, %d)\n", a, b);
} else {
printf("Brute Force: No pair found\n");
}
return 0;
}
loop until pointers meet to check pairs
int sum = arr[left] + arr[right];
calculate sum of values at pointers
check if sum matches target
left++; // move left pointer right to increase sum
increase sum by moving left pointer right when sum too small
right--; // move right pointer left to decrease sum
decrease sum by moving right pointer left when sum too large
for (int i = 0; i < size - 1; i++) {
outer loop for brute force checking all pairs
for (int j = i + 1; j < size; j++) {
inner loop for brute force checking all pairs
if (arr[i] + arr[j] == target) {
check if current pair sums to target
Two Pointer: Pair found (1, 5)
Brute Force: Pair found (1, 5)