Listalla on kokonaisluvut [1,2,3,...,n] jossakin järjestyksessä. Tehtäväsi on selvittää, onko lista mahdollista järjestää pinon avulla.
Järjestämisessä käyt läpi listan alkiot vasemmalta oikealle. Jokaisen alkion kohdalla siirrät ensin alkion joko pinoon tai tuloslistan loppuun, minkä jälkeen voit siirtää pinosta haluamasi määrän alkioita tuloslistan loppuun. Tavoitteena on, että lopuksi kaikki alkiot ovat tuloslistalla järjestyksessä.
Voit olettaa, että listalla on enintään 10^5 alkiota. Tavoitteena on, että algoritmin aikavaativuus on O(n).
Python
Toteuta tiedostoon stacksort.py funktio check, joka ilmoittaa, voiko listan järjestää pinon avulla.
def check(t):
# TODO
if __name__ == "__main__":
print(check([1,2,3,4])) # True
print(check([4,3,2,1])) # True
print(check([3,4,1,2])) # False
print(check([1])) # True
print(check([5,4,3,1,2,6])) # True
Java
Toteuta tiedostoon StackSort.java metodi check, joka ilmoittaa, voiko listan järjestää pinon avulla.
public class StackSort {
public boolean check(int[] t) {
// TODO
}
public static void main(String[] args) {
StackSort s = new StackSort();
System.out.println(s.check(new int[] {1,2,3,4})); // true
System.out.println(s.check(new int[] {4,3,2,1})); // true
System.out.println(s.check(new int[] {3,4,1,2})); // false
System.out.println(s.check(new int[] {1})); // true
System.out.println(s.check(new int[] {5,4,3,1,2,6})); // true
}
}
