Jamal Murray earned plaudits for his "complete basketball game" after hitting the last-gasp three-pointer that earned the Denver Nuggets a 121-120 win over the Portland Trail Blazers.

The impressive road win saw the Nuggets improve to 15-10 for the season and halt a streak of three defeats.

Murray's step-back game-winner came with less than a second remaining, capping a 21-point game, two nights after he shot just 2-of-11 from the field against the Dallas Mavericks.

Reigning back-to-back MVP Nikola Jokic was also a force for the Nuggets with 33 points (14-of-25), 10 rebounds and nine assists, while Damian Lillard scored a game-high 40 points for Portland.

Lillard put the home team two points ahead with a stunning three-pointer with nine seconds remaining, but Murray brought the late twist.

Nuggets coach Michael Malone said: "It was great to see Jamal find his rhythm. Coming off a game against Dallas where I think he was really frustrated with his offense, not making shots the way he knows he's capable of making shots.

"I started him in that fourth quarter, and I was planning on taking him out to bring him back, but once Jamal sees the ball go in it doesn't take many for him to catch fire, and he ran the whole fourth quarter, obviously. [He had] 21 points, eight assists, only two turnovers, five rebounds – a complete basketball game.

"It was an understatement to say a much-needed win after losing three in a row. I thought our fourth-quarter defense was outstanding, 21 points allowed. As I told our players, when we don't turn the ball over and we defend, we're a really good team. Now the challenge is to do that a lot more consistently. A lot of guys stepped up and played well."

DeAndre Jordan played the 1,000th game of his NBA career, and Malone paid tribute to that achievement, saying of the 34-year-old center: "I'm really thankful that he's here and a part of our family."

Murray, meanwhile, felt the Trail Blazers, who dominated the third quarter 35-26, were brilliantly reined in by the Nuggets in the closing stages.

He told Altitude TV: "They came out hot in the second half, but we knew if we wanted to win the game we had to play defense together as a unit, especially with this crowd, so I think we did a good job of that.

"Dame got hot. It was our defense down the stretch. We were able to stay together, keep our unit together and get some stops down the stretch.

"We know they're going to make shots, especially on their home floor. We couldn't get down on ourselves and keep that negative energy. Go to the next play and figure it out."