// http://w...content-available-to-author-only...t.com/find-pair-with-given-sum-array/
// To compile and run: gcc 0001.c `pkg-config --cflags --libs glib-2.0` && ./a.out
#include <stdio.h>
#include <stdlib.h>
#include <glib.h>
int cmp(const void * a, const void * b) {
return (*(int *)a - *(int *)b);
}
// 2. O(nlogn) - time complexity; O(1) - space complexity
void findPairBySorting(int arr[], int n, int sum) {
int low = 0, high = n - 1, temp_sum;
qsort(arr
, n
, sizeof(int), cmp
); while (low < high) {
temp_sum = arr[low] + arr[high];
if (temp_sum == sum) {
printf("Pair found: %i and %i.\n", arr
[low
], arr
[high
]); return;
}
temp_sum < sum ? low++ : high--;
}
}
// 3. O(n) - time complexity; O(n) - space complexity
void findPairByHashing(int arr[], int n, int sum) {
int second_number;
GHashTable * hash = g_hash_table_new(g_int_hash, g_int_equal);
for (int i = 0; i < n; i++) {
second_number = sum - arr[i];
if (g_hash_table_lookup(hash, &second_number) != NULL) {
printf("Pair found: %i and %i.\n", second_number
, arr
[i
]); return;
}
g_hash_table_insert(hash, &arr[i], &i);
}
}
int main() {
int arr[] = { 8, 7, 2, 5, 3, 1};
// Outputs: Pair found: 2 and 8.
findPairBySorting(arr, sizeof(arr) / sizeof(int), 10);
// Outputs: Pair found: 3 and 7.
findPairByHashing(arr, sizeof(arr) / sizeof(int), 10);
return 0;
}
Ly8gaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnQuY29tL2ZpbmQtcGFpci13aXRoLWdpdmVuLXN1bS1hcnJheS8KLy8gVG8gY29tcGlsZSBhbmQgcnVuOiBnY2MgMDAwMS5jIGBwa2ctY29uZmlnIC0tY2ZsYWdzIC0tbGlicyBnbGliLTIuMGAgJiYgLi9hLm91dAoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNpbmNsdWRlIDxnbGliLmg+CgppbnQgY21wKGNvbnN0IHZvaWQgKiBhLCBjb25zdCB2b2lkICogYikgewoJcmV0dXJuICgqKGludCAqKWEgLSAqKGludCAqKWIpOwp9CgovLyAyLiBPKG5sb2duKSAtIHRpbWUgY29tcGxleGl0eTsgTygxKSAtIHNwYWNlIGNvbXBsZXhpdHkKdm9pZCBmaW5kUGFpckJ5U29ydGluZyhpbnQgYXJyW10sIGludCBuLCBpbnQgc3VtKSB7CglpbnQgbG93ID0gMCwgaGlnaCA9IG4gLSAxLCB0ZW1wX3N1bTsKCXFzb3J0KGFyciwgbiwgc2l6ZW9mKGludCksIGNtcCk7Cgl3aGlsZSAobG93IDwgaGlnaCkgewoJCXRlbXBfc3VtID0gYXJyW2xvd10gKyBhcnJbaGlnaF07CgkJaWYgKHRlbXBfc3VtID09IHN1bSkgewoJCQlwcmludGYoIlBhaXIgZm91bmQ6ICVpIGFuZCAlaS5cbiIsIGFycltsb3ddLCBhcnJbaGlnaF0pOwoJCQlyZXR1cm47CgkJfQoJCXRlbXBfc3VtIDwgc3VtID8gbG93KysgOiBoaWdoLS07Cgl9CglwcmludGYoIlBhaXIgbm90IGZvdW5kLlxuIik7Cn0KCi8vIDMuIE8obikgLSB0aW1lIGNvbXBsZXhpdHk7IE8obikgLSBzcGFjZSBjb21wbGV4aXR5CnZvaWQgZmluZFBhaXJCeUhhc2hpbmcoaW50IGFycltdLCBpbnQgbiwgaW50IHN1bSkgewoJaW50IHNlY29uZF9udW1iZXI7CglHSGFzaFRhYmxlICogaGFzaCA9IGdfaGFzaF90YWJsZV9uZXcoZ19pbnRfaGFzaCwgZ19pbnRfZXF1YWwpOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQlzZWNvbmRfbnVtYmVyID0gc3VtIC0gYXJyW2ldOwoJCWlmIChnX2hhc2hfdGFibGVfbG9va3VwKGhhc2gsICZzZWNvbmRfbnVtYmVyKSAhPSBOVUxMKSB7CgkJCXByaW50ZigiUGFpciBmb3VuZDogJWkgYW5kICVpLlxuIiwgc2Vjb25kX251bWJlciwgYXJyW2ldKTsKCQkJcmV0dXJuOwoJCX0KCQlnX2hhc2hfdGFibGVfaW5zZXJ0KGhhc2gsICZhcnJbaV0sICZpKTsKCX0KCXByaW50ZigiUGFpciBub3QgZm91bmQuXG4iKTsKfQoKaW50IG1haW4oKSB7CglpbnQgYXJyW10gPSB7IDgsIDcsIDIsIDUsIDMsIDF9OwoJLy8gT3V0cHV0czogUGFpciBmb3VuZDogMiBhbmQgOC4KCWZpbmRQYWlyQnlTb3J0aW5nKGFyciwgc2l6ZW9mKGFycikgLyBzaXplb2YoaW50KSwgMTApOwoJLy8gT3V0cHV0czogUGFpciBmb3VuZDogMyBhbmQgNy4KCWZpbmRQYWlyQnlIYXNoaW5nKGFyciwgc2l6ZW9mKGFycikgLyBzaXplb2YoaW50KSwgMTApOwoJcmV0dXJuIDA7Cn0K