Hamilton was initially gifted the lead at the second corner, as Verstappen overshot Turn 1 and had to cut inside the apex of Turn 2. But Verstappen regained the lead when he undercut Hamilton in the pitstop sequence.
Verstappen gave up the lead once more, when he opted for a second pitstop and Hamilton stayed out. He relentless chased down Hamilton, passing him to take the win on the penultimate lap.
From pole position, Verstappen led Hamilton until the first corner where Max overshot, which meant he cut the inside of Turn 2, and allowed Lewis to grab the lead. Valtteri Bottas (Mercedes) held third place, ahead of Sergio Perez (Red Bull), Carlos Sainz (Ferrari) and Pierre Gasly (AlphaTauri).
Behind Ferrari’s seventh-placed Charles Leclerc, McLaren duo Daniel Ricciardo and Lando Norris passed Fernando Alonso’s Alpine on Lap 11 to run eighth and ninth. Aston Martin’s Sebastian Vettel, who passed Alonso’s teammate Esteban Ocon early on, also overtook Alonso two laps later.
Ricciardo sliced past Leclerc on Lap 14, the Ferrari then diving for the pits to switch from medium tyres to hards. This undercut put him ahead of Ricciardo, who himself proved the power of the undercut by getting ahead of both Sainz and Gasly.
At the front, Bottas pitted first on Lap 18 which triggered Verstappen (who had dropped 3s behind Hamilton) into responding on the next lap. Hamilton pitted on the following tour and seemed surprised when Verstappen was able to pass him going into Turn 1, Red Bull’s team leader taking full advantage of the undercut to retake the lead he’d lost in the opening seconds of the race.
Hamilton was in DRS range of Verstappen straight after the pitstop cycle and also had Bottas right behind as the top three ran nose to tail as the race hit half distance. Perez ran long and led for a few laps before rejoining in a distant fourth.
Verstappen pitted for a second time on Lap 32, switching back to mediums. He rejoined in fourth, Perez quickly letting him by into third, with Verstappen catching leader Hamilton by 2s per lap to begin with.
Verstappen caught Bottas with 10 laps remaining, Hamilton having extended his lead to over 4s. Verstappen passed Bottas at Signes on Lap 44, but was 5s behind Hamilton.
As Verstappen closed on Hamilton – running 3s behind with five laps remaining – Perez caught Bottas, passing him with four laps to go for the final spot on the podium.
The battle for the win was decided in the very closing stages, Verstappen passing Hamilton at the chicane with less than two laps remaining.
The McLarens won the battle for best of the rest, Norris passing Ricciardo for fifth. Gasly was seventh, ahead of Alonso and the two Aston Martins of Sebastian Vettel and Lance Stroll, who both started on hard tires