Date: | 3 Oct 00 13:53:06 EET DST |
From: | Popovici Dan <popovici_dan@usa.net> | Block address |
To: | Cristian FRANCU <francu@cs.rutgers.edu> |
Subject: | Re: [Problemuta] |
CC: | probleme@ldc.ro |
|
|
Se da un vector de n elemente intregi. Se cere sa se scrie o functie
care
sa determine daca el este o permutare a numerelor de la 1 la n.
Algoritmul
trebuie sa fie liniar. Memoria suplimentara folosita sa fie O(1) (deci
nu
aveti voie sa folositi inca un vector). In schimb, aveti voie sa
stricati
vectorul.
PS poate cineva sa demonstreze ca problema (nu) se poate rezolva fara a
strica nici vectorul?
Chiar ca mi s-a parut interesanta problemuta si uite algoritmul gasit
de mine
:
1) Se verifica daca exista un numar negativ in sir daca da nu este o
permutare
,iar daca nu exista se trece mai departe
2)Se parcurge vectorul si se schimba semnul elementului a[i](suntem pe
pozitia
i ,valoarea este a[i] si a[a[i]]:=-a[a[i]], iar daca a[i]este negativ
se
schima semnul lui -a[a[i]])
3)Daca la sfarsit toate elementele sunt negative atunci vectorul este
o
permutare
Daca nu se intalege algoritmul trimit si sursa
Ce parere ai ?
____________________________________________________________________
Get free email and a permanent address at
http://www.netaddress.com/?N=1
Privacy Policy-
Terms of Service
-
Guidelines
Copyright © 1994-2000
Yahoo! Inc. All rights reserved.