Annettuna on lista kokonaislukuja, ja tehtäväsi on laskea, monellako tavalla voit halkaista listan kahteen osaan niin, että jokainen vasemman osan alkio on pienempi kuin jokainen oikean osan alkio.
Esimerkiksi listassa tapoja on :
- ja
- ja
- ja
Voit olettaa, että jokainen luku on välillä ja listalla on enintään lukua. Tavoitteena on, että algoritmin aikavaativuus on .
Python
Toteuta tiedostoon splitlist.py
funktio count
, joka antaa tapojen määrän.
def count(t): # TODO if __name__ == "__main__": print(count([1,2,3,4,5])) # 4 print(count([5,4,3,2,1])) # 0 print(count([2,1,2,5,7,6,9])) # 3 print(count([1,2,3,1])) # 0
Java
Toteuta tiedostoon SplitList.java
metodi count
, joka antaa tapojen määrän.
public class SplitList { public int count(int[] t) { // TODO } public static void main(String[] args) { SplitList s = new SplitList(); System.out.println(s.count(new int[] {1,2,3,4,5})); // 4 System.out.println(s.count(new int[] {5,4,3,2,1})); // 0 System.out.println(s.count(new int[] {2,1,2,5,7,6,9})); // 3 System.out.println(s.count(new int[] {1,2,3,1})); // 0 } }