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 \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 } }