MILWAUKEE -- Charlie Villanueva knew he was in a groove when his shot from beyond midcourt was good.
Villanueva had already made four 3-pointers in the first quarter when he launched a 65-foot shot from well inside the Nuggets' side on the court.
"I had it going early on and once I hit that shot, I knew I was on fire," he said after he tied his career high with seven 3-pointers. He grabbed five rebounds and four assists.
Ramon Sessions added 16 of his 27 points in the first half for the Bucks.
"Charlie and Ramon kind of carried the offensive load for us," Bucks coach Scott Skiles said. "We had other guys chipping in with some points, but for the most part those two guys made the big offensive plays when we had to have them."
Villanueva sat out much of the second quarter after picking up his second foul.
"Obviously, I would have left him in there if he hadn't gotten two fouls," Skiles said. "He really carried us."
Nuggets coach George Karl said the team watched film and discussed Sessions and Villanueva, but then didn't carry it onto the court.
"I think they were surprised by it," Karl said of the success by Villanueva and Sessions. "I think they were surprised by how quick he [Villanueva] shoots the ball. Sessions kept getting to the free-throw line."
The Nuggets' thin frontline possibly got even thinner when Jefferson and Nene collided with less than a minute to play. The two appeared to bang their knees together. Nene left with a right knee contusion and needed crutches to get to the team bus. He'll be evaluated by team doctor Steve Traina in Denver on Monday.
Villanueva has started the last 18 games, averaging 22.4 points and 7.9 rebounds with seven double-doubles.
Carmelo Anthony scored 33 points and Chauncey Billups added 21 for the Nuggets, who ended a season-high eight-game road trip with a 5-3 mark. Denver plays its first game at home since February 3 on Monday against the Boston Celtics.
Villanueva made one 3-pointer each in the second and third before hitting one that gave Milwaukee its biggest lead of the fourth at 103-98 with 10 minutes to play. It was the most 3s Denver has allowed since Jason Kidd had six for Dallas on Nov. 7.
Villanueva hit a short jumper over Linas Kleiza to put Milwaukee up 116-113 with 33.3 seconds left. Anthony fouled Luke Ridnour who made one free throw, but Anthony answered with a driving layup as he muscled through the Bucks' defense.
Charlie Bell played the entire final period and finished with 13 points, including two pressure free throws with 2.8 seconds left for the Bucks' final margin. Kleiza was ignored by Milwaukee defenders as he drove in for a dunk, Denver's final points.
Anthony turned in another gritty effort since bruising his left knee Feb. 18 at Philadelphia. The team's leading scorer with a 21.6 average, he managed just 12 points on Friday in 116-99 loss to the Chicago Bulls and was a game-time decision against Milwaukee. He had 20 points in the first half, shooting 6-of-9 from the floor and made eight of 10 free throws.
Denver's loss to the Bucks (28-31) was only their fourth this season against a sub-.500 opponent.
The lead changed six times down the stretch before Richard Jefferson, who had 17 points, scored on a driving layup that gave Milwaukee a 114-113 lead with 1:39 left to play. Villanueva's short jumper in traffic pushed the lead to three and the Bucks hung on for the victory.
The Northwest Division-leading Nuggets have been on the road 19 days, but won't get a lot of rest immediately. They play three games in five days, facing the Celtics without Kevin Garnett (right knee sprain) on Monday, the Atlanta Hawks on Wednesday and the Los Angeles Lakers on Friday.
Renaldo Balkman started for Kenyon Martin, who was out with back spasms. Karl said he was unsure if Martin would play against the Celtics. ... The teams traded buzzer-beating 3s in the first half. Villanueva heaved his big shot from the Nuggets' side of center court at the end of first quarter. Jones made a 34-footer for the Nuggets to close the second. ... Anthony's first basket of the game, a 20-foot jumper, put him in fourth place on the Nuggets' career scoring list, passing Ralph Simpson (10,130). ... The Nuggets had 24 turnovers to Milwaukee's 13. Denver outrebounded the Bucks 48-31.