Practice #5
Coddy'nin Çift Yönlü Bağlı Liste - Veri Yapıları Serisi #6 kursunda ders 14 / 14.
Görev
KolaySıralanmış bir tam sayı dizisi arr (sıralı bir çift yönlü bağlı listenin değerleri) ve bir tam sayı target verildiğinde, i < j ve arr[i] + arr[j] == target koşulunu sağlayan (i, j) dizin çiftlerinin sayısını döndüren bir countPairs fonksiyonu yazın.
Girdinin yinelenen değerler içermediğini varsayın.
Bu problemi çözmek için bir çift yönlü bağlı liste kullanın! Her iki uçtan içe doğru hareket eden iki işaretçi (pointers) kullanın.
DoublyLinkedList sınıfını kullanmalısınız (node.<ext> ile birlikte doublylinkedlist.<ext> dosyasında sağlanmıştır) — sonucu hesaplamak için dizilerin ters çevrilmesi (reverse), dilimleme (slicing), sıralama (sort) veya standart kütüphane liste işlemleri gibi dile özgü yerleşik işlevleri kullanmayın.
Kendin dene
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "solution.h"
int main() {
char line1[8192];
char line2[64];
if (!fgets(line1, sizeof(line1), stdin)) line1[0] = '\0';
if (!fgets(line2, sizeof(line2), stdin)) line2[0] = '\0';
int arr[4096];
int len = 0;
char* tok = strtok(line1, " \t\r\n");
while (tok) { arr[len++] = atoi(tok); tok = strtok(NULL, " \t\r\n"); }
int n = atoi(line2);
int r = countPairs(arr, len, n);
printf("%d\n", r);
return 0;
}