CSES - Kahden summa Annettuna on lista, jossa on $n$ lukua, sekä luku $x$. Monellako tavalla voidaan muodostaa lukupari, jossa on kahdessa eri kohdassa listassa oleva luku ja jonka summa on enintään $x$?

Voit olettaa, että $n$ on enintään $10^5$ ja jokainen listan luku ja $x$ on kokonaisluku välillä $1 \dots 10^9$. Tavoitteena on, että algoritmin aikavaativuus on $O(n)$ tai $O(n \log n)$.

Python

Toteuta tiedostoon twosum.py funktio find, joka ilmoittaa lukuparien määrän.
def find(t,x):
    # TODO

if __name__ == "__main__":
    print(find([1,2,3],4)) # 2
    print(find([5,2,4,7],10)) # 4
    print(find([1,1,1,1],2)) # 6
    print(find([1,1,1,1],1)) # 0
    print(find([8,8,1,2,5,1,9,3],9)) # 14
Java

Toteuta tiedostoon TwoSum.java metodi find, joka ilmoittaa lukuparien määrän.
public class TwoSum {
    public long find(int[] t, int x) {
        // TODO
    }

    public static void main(String[] args) {
        TwoSum t = new TwoSum();
        System.out.println(t.find(new int[] {1,2,3}, 4)); // 2
        System.out.println(t.find(new int[] {5,2,4,7}, 10)); // 4
        System.out.println(t.find(new int[] {1,1,1,1}, 2)); // 6
        System.out.println(t.find(new int[] {1,1,1,1}, 1)); // 0
        System.out.println(t.find(new int[] {8,8,1,2,5,1,9,3}, 9)); // 14
    }
}