The 27-year-old alleged murderer was arrested overnight after his DNA was matched to traces recovered from Olsen's corpse and from a condom and a cigarette butt found in the flat, prosecutor Giuseppe Creazzo told a press conference in the historic Tuscan city.
Creazzo said CCTV recordings and witness statements indicated the suspect had met 35-year-old Olsen in the Montecarla nightclub in the early hours of Friday and accompanied her back to her flat.
The couple had sex but there was no indication that Olsen's death resulted from an erotic asphyxiation game gone wrong, a theory widely mooted in the Italian media in recent days.
Press reports earlier put the suspect's age at 25.
Creazzo said Olsen had died as a result of strangling but had also suffered a double fracture of the skull, suggesting there had been a fight at some point after the couple had sex.
The prosecutor said the suspect, who had entered Italy illegally a few months ago, had "largely admitted" his role in the killing but said the investigation would continue to tie up all the loose ends.
The suspect said he pushed Olsen during a fight and she fell, hitting her head, but that he did not intend to kill her, La Repubblica reported.
The pair had consensual sex, he claimed, and the fight started after she asked him to leave, La Repubblica said.
The suspect claimed the strangle marks were due to him trying to lift her up, Ansa reported.
Olsen's corpse was found at her flat in the Oltrarno area on Saturday afternoon. The artist and event organizer had lived in Florence for several years.
Creazzo said it was possible that neither Olsen or the alleged killer "were entirely clear-headed" at the time of the murder but said that would not be clear until toxicology tests had established if either of them had taken drugs.
The Montecarla nightclub visited by Olsen in the early hours of Friday has been temporarily closed down several times in recent years, most often because of concerns it was being used by dealers to sell drugs.