In the second part of the race, Verstappen briefly had to focus behind him rather than in front as the second McLaren of Piastri gave hints of a potential one-two.
The Australian had a slow start to the race, dropping from third to fourth at the start and spending the first stint stuck behind George Russell’s Mercedes.
McLaren ran Piastri on a long first stint to give him a tyre-life advantage in the second half of the race.
Piastri came out in fifth place, behind Norris, Verstappen and Leclerc and gained two places on Piastri and Russell with an earlier pit stop after tracking them in the first stint, having passed Red Bull’s Sergio Perez at the start.
Initially, Piastri showed pace that might have allowed him to catch Verstappen by the end of the race.
He soon picked off Russell but Piastri became stuck behind Leclerc’s Ferrari and his progress halted there as the Ferrari driver took a podium finish he did not think would be possible before the race.
“Very surprised,” Leclerc said. “I am not very often happy with a P3 but with today’s race we can be extremely happy with the job we have done on a difficult weekend for the team.
“In the race, we found some more pace, executed a perfect strategy, under-cutted two of our competitors and managed to keep them behind.”
Behind Piastri, the second Ferrari of Carlos Sainz also showed strong form. The Spaniard moved up from 11th on the grid after a difficult weekend caused by a gearbox failure in the only dry session of the weekend before qualifying on Friday to catch and pass Red Bull’s Perez for fifth place.
Russell had been running ahead of both but dropped back to seventh with a second pit stop on to the soft tyres with 16 laps to go.
That dropped him behind Sainz and Perez and left him ahead of team-mate Hamilton, who had started 14th after qualifying 12th and then receiving a penalty for impeding Perez.
The final points positions were taken by Alpine’s Pierre Gasly, capitalising on a start that vaulted him from 10th on the grid to seventh on the first lap, and Aston Martin’s Fernando Alonso.