小米编程题:一定数目的钱,钱花完买到的最少的商品数量
一个简单的思路:因为要把钱花完,买到最少数量的商品,那就从最贵的开始买。
1,先把商品价格排序,然后从end()往begin()循环;
2,每轮循环时,先把最高单价,用muchprice保存,再判断余数为0?为0就把商存到表示数量的num数组中,更新总数量res,并且break跳出循环,返回res,不为0就把商存到num数组中,更新res,余数就是还剩余的钱,判断余数是否比最小的单价还小,小的话就是钱没花完,且剩余的钱已经买不了任何商品了,就返回-1;
3,否则进行再次循环,判断剩余的钱是否比本轮循环的最高单价小,如果小的话,肯定是不能买到这个单价的商品的,那就直接continue,跳过本次循环,进行到下一轮循环的最高单价。
思路感觉比较简单。为什么只能通过一部分;是有遗漏的地方吗?
int solution(vector < int > prices, int budget) { int res = 0; int len = prices.size(); int muchprice = 0; vector<int> num(len,0); sort(prices.begin(),prices.end()); if (budget <= 0) { return -1; } for (int i = len-1; i >= 0; i--) { muchprice = prices[i]; if (budget<muchprice) { continue; } if (0 == (budget % muchprice)) { num[i] = (budget / muchprice); res = res+num[i]; break; }else { num[i]=(budget / muchprice); res = res + num[i]; budget = budget%muchprice; if (budget<prices[0]) { return -1; } } } return res; }
#笔试题目##小米##题解#