Chris Gayle's brutal century was in vain after Jos Buttler and Eoin Morgan made scintillating hundreds as record-breaking England beat West Indies by 29 runs in a one-day international classic in Grenada.

Buttler bludgeoned an ODI-best 150 from only 77 balls and Morgan made 103 off 88 deliveries after openers Alex Hales (82) and Jonny Bairstow (56) set the tone at St George's on Wednesday.

England struck a world record 24 sixes - 12 of those coming from Buttler, who went from 50 to 150 in only 31 balls - as they posted their third-highest score in the 50-over format of 418-6 after being put in by Jason Holder.

The Windies threatened to pull off an astonishing run chase as Gayle smashed 162 off just 97 deliveries - including 14 maximums of his own - but his second hundred of the series was not enough to prevent England from taking a 2-1 lead with one match to play.

Darren Bravo (61) and Carlos Brathwaite (50) chipped in with useful innings, but Adil Rashid (5-85) finished things off with four wickets in an over and Mark Wood took 4-60 as the Windies were dismissed for 389 in a thriller.

Bairstow and Hales - opening with Jason Roy out due to a hamstring strain - got England off to a flyer, racing to half-centuries in an opening stand of 100 from only 13.5 overs.

Oshane Thomas got the breakthrough when Bairstow chopped on and he also removed Joe Root cheaply before Hales fell to a brilliant catch from Shimron Hetmyer.

Morgan and Buttler then combined for a devastating partnership of 204 to leave the Windies not knowing what had hit them, capitalising on dream batting conditions and some poor bowling.

Skipper Morgan pulled Thomas into the crowd to bring up his half-century and Buttler became the fourth batsman to reach 50 with a maximum, courtesy of a vicious hook.

Buttler went berserk after reaching 50, careering to a stunning century with a barrage of enormous sixes after being put down by John Campbell seven shy of three figures.

Morgan became the first batsman to score 6,000 ODI runs for England and brought up his 12th ODI hundred in style by hitting Holder for six into the leg side before falling to Sheldon Cottrell.

Buttler was given another reprieve when he was caught on 107 but Holder's delivery was above waist height and he struck a world-record 24th six of the innings in the final over to move on to 150, then departed off the next ball from Brathwaite.

The excellent Wood got rid of Campbell and Shai Hope early in the reply, but Gayle took centre stage with an incredible display of clean-striking on a flat track with short boundaries.

Gayle's stand-and-deliver approach worked a treat yet again and Bravo offered great support for the opener, who celebrated a sensational 55-ball hundred by raising his helmet aloft on his bat handle.

Bravo struck Chris Woakes for back-to-back sixes to reach his half-century as Gayle continued to motor at the other end, but Wood returned to see the back of the former and Hetmyer in the same over.

Gayle passed 150 by smashing Rashid for six and the Windies were still on course for victory when the opener was cleaned up by Ben Stokes after reaching the 10,000-run landmark in ODIs, with Brathwaite the key man.

Rashid stepped up to win it for England, though, getting Ashley Nurse, Brathwaite and Devendra Bishoo before Thomas was stumped first ball in a magnificent 48th over, which began with the Windies needed 32 runs from 18 balls.