Manchester City retained the Premier League title after surviving a scare on the final day to see off Brighton 4-1 at the Amex and beat Liverpool to top spot.
For 88 seconds on the south coast, Liverpool were heading for the title as they led Wolves and City fell behind to Glenn Murray’s header, but Pep Guardiola’s men found their stride to finish on 98 points – one ahead of the Reds.
Murray gave Brighton a shock lead on 26 minutes, his finish from a corner sending Liverpool fans into delirium, but City quickly responded.
Sergio Aguero struck the ball through Mat Ryan’s legs after a good pass from David Silva two minutes later, and then Aymeric Laporte headed home unmarked from a corner on 38 minutes to make it 2-1.
Riyad Mahrez, making a rare start, finished superbly just after the hour, and Ilkay Gundogan’s majestic free kick put City in total control and turned the closing stages into a party for the visiting fans.
Liverpool beat Wolves 2-0 at Anfield but, despite finishing their season with 97 points, were denied a first Premier League title since 1990 by Manchester City’s win.
Chances were few and far between in the opening exchanges but Liverpool took the lead after 17 minutes when Trent Alexander-Arnold crossed from the right and found Sadio Mane unmarked in the box to hammer home.
Matt Doherty got through on the right for Wolves, but his curling shot crashed off the top of the bar with Alisson beaten.
Alexander-Arnold whipped in another fine cross for Mane to head his second after the break before Premier League Player of the Year Virgil van Dijk was denied by the crossbar.
Manchester United’s disappointing season stumbled to a dismal conclusion as they were beaten 2-0 at home by relegated Cardiff.
Ole Gunnar Solskjaer’s side were unable to muster much response after Cardiff took a surprise lead after 23 minutes when Andreas Pereira fouled Nathaniel Mendez-Laing in the area and Mendez-Laing converted the penalty.
Neil Warnock’s side made it 2-0 when Mendez-Laing tapped home at the far post – but they were grateful to keeper Neil Etheridge for a fine save from Marcus Rashford’s header moments later.
Jesse Lingard shot wide as United searched in vain for a route back into the game, Antonio Valencia making his final appearance for them when he replaced Diogo Dalot.
Europa League finalists Chelsea ended the season in third place after a 0-0 draw at Leicester.
Maurizio Sarri’s side made a purposeful start and came close through Ross Barkley, who was denied by Kasper Schmeichel, and Gonzalo Higuain, who turned and fired narrowly wide.
Willian had another effort for Chelsea, but Leicester began to ask more questions of the Londoners after the break.
On-loan midfielder Youri Tielemans was narrowly off-target with a long-range volley, and David Luiz had to make a crucial late interception as Ben Chilwell fired a dangerous cross deep into the area.
Tottenham made sure of fourth spot as they drew 2-2 at home to Everton to finish a point clear of North London rivals Arsenal.
Spurs, fresh from their astonishing Champions League comeback against Ajax in midweek, struck after only three minutes when, following a corner, Eric Dier hammered home.
They failed to make the most of that early advantage as Everton worked their way back into the contest, the Merseysiders equalising through Theo Walcott after 69 minutes and going ahead three minutes later when Cenk Tosun struck.
But Christian Eriksen, so often an inspiration for Tottenham, proved to be so once again when he curled home a free kick to equalise.
Pierre-Emerick Aubameyang struck twice as Arsenal won 3-1 at Burnley but had to settle for fifth place.
Aubameyang hit the post in a dominant opening spell for the Europa League finalists, but Burnley were a whisker away from taking the lead when Chris Wood’s shot the inside of an upright.
Josh Lowton was next to try his luck for the Clarets, but Aubameyang broke the deadlock after 52 minutes when he latched on to a poor Jack Cork backpass and struck his 22nd goal of the season after 63 minutes.
Ashley Barnes pulled one back two minutes later to keep Burnley’s hopes alive, but Eddie Nketiah struck in the final seconds to ensure the points went to the Gunners.
Crystal Palace ended their season on a high as they beat Bournemouth 5-3 in an outstanding game at Selhurst Park.
Palace led after 24 minutes when Wilfried Zaha’s cross from the right fell for Michy Batshuayi to steer in, and Batshuayi repeated the trick when he slid home Aaron Wan-Bissaka’s pass six minutes later.
The Eagles were three goals clear with 37 minutes gone when Jack Simpson diverted the ball into his own net, but Jefferson Lerma produced a stunning 25-yard drive to give Bournemouth a foothold and they made it 3-2 early in the second half thanks to Jordon Ibe.
Patrick van Aanholt eased Palace nerves after 65 minutes, but Josh King made it 4-3 with more than a quarter of an hour to play before Andros Townsend put matters beyond doubt with a stylish Palace fifth.
West Ham ended their campaign in style with a 4-1 victory at Watford.
After a bright start from Watford, West Ham went ahead after 15 minutes as Mark Noble rounded off a combination with Michail Antonio with a smart finish, and Antonio was again in the thick of the action when his shot was tipped onto the bar and Manuel Lanzini headed home.
Watford pulled a goal back within a minute of the restart, Gerard Deulofeu cashing in on a poor Pablo Zabaleta backpass – but moments later the hosts were down to 10 men as Jose Holebas was shown a red card for bringing down Antonio.
Marko Arnautovic made it 3-1 to the visitors and Noble completed the scoring from the spot as the Hammers wrapped up the points with a flourish.
Newcastle rounded off their season in dominant fashion as they eased to a 4-0 win at relegated Fulham.
The Magpies made a whirlwind start and were two goals up inside the first 11 minutes, Jonjo Shelvey firing into the top corner and Ayoze Perez doubling the advantage with a tap-in after Christian Atsu’s shot was saved.
It was all over on the hour when Fabian Schar leapt high to head home a corner, and there was still time for Salomon Rondon to add another for the visitors when he prodded home.