CSES - Ikkunat

Annettuna on lista, jossa on n lukua. Tehtäväsi on laskea vasemmalta oikealle jokaiselle k:n pituiselle alilistalle eli ikkunalle, montako eri lukua se sisältää.

Esimerkiksi kun lista on [1,2,3,2,2,2] ja k=3, niin ikkunat ovat [1,2,3], [2,3,2], [3,2,2] ja [2,2,2]. Näissä ikkunoissa on 3, 2, 2 ja 1 eri lukua.

Voit olettaa, että n on enintään 10^5, jokainen luku on kokonaisluku välillä 1 \dots 10^9 ja 1 \le k \le n.

Python

Toteuta tiedostoon windows.py funktio count, joka antaa eri lukujen määrät ikkunoissa.

def count(t,k):
    # TODO

if __name__ == "__main__":
    print(count([1,1,2,2],2)) # [1,2,1]
    print(count([1,1,1,1],4)) # [1]
    print(count([1,2,3,2,2,2],3)) # [3,2,2,1]

Java

Toteuta tiedostoon Windows.java metodi count, joka antaa eri lukujen määrät ikkunoissa.

import java.util.*;

public class Windows {
    public int[] count(int[] t, int k) {
        // TODO
    }

    public static void main(String[] args) {
        Windows w = new Windows();
        System.out.println(Arrays.toString(w.count(new int[] {1,1,2,2}, 2))); // [1,2,1]
        System.out.println(Arrays.toString(w.count(new int[] {1,1,1,1}, 4))); // [1]
        System.out.println(Arrays.toString(w.count(new int[] {1,2,3,2,2,2}, 3))); // [3,2,2,1]
    }
}